Comment puis-je obtenir une entrée utilisateur, y compris des espaces.
J'ai essayé de faire ceci:
printf("Enter a sentance: "); scanf("%s", st); getchar(); printf("%s", st);
Mais quand j'entre Bonjour le monde ça ne fait que retourner Bonjour
3 Réponses :
scanf
ne lit que jusqu'au premier espace, comme le fait cin >> someString
. Ce que vous voulez, en supposant que vous puissiez utiliser
et
, est
std::string str; std::getline(std::cin, str);
Cela obtiendra toutes les entrées jusqu'à ce que les appels des utilisateurs saisissent (\ n).
J'obtiens cette erreur: "aucune fonction correspondante pour l'appel à getline"
Ah j'ai fait une erreur de formatage. Il devrait lire "en supposant que vous pouvez utiliser iostream et string". La fonction getline est définie dans la bibliothèque de chaînes.
" scanf
ne lit que jusqu'au premier espace " - en fait, scanf ()
lui-même peut lire plus d'un mot à la fois. C'est % s
spécifiquement qui arrête la lecture lorsqu'il rencontre des espaces, mais vous pouvez utiliser quelque chose de plus comme % [^ \ n] \ n
ou % [^. ].
à la place pour lire une phrase entière. Assurez-vous simplement de spécifier une largeur pour éviter un débordement de tampon.
@RemyLebeau J'ai pensé que cela sortait du cadre de cette question, je voulais juste garder les choses simples.
Utilisez fgets () (qui a une protection contre le dépassement de la mémoire tampon) pour obtenir votre entrée dans une chaîne.
printf("Enter a sentance: "); fgets(st, 256, stdin); printf("%s", st);
cela semblait mieux fonctionner que d'utiliser getline, merci!
Essayez comme ceci:
#include <iostream> #include <string> int main() { std::string st; std::cout << "Enter a sentence: "; getline(std::cin, st); std::cout<< st; }
Cela dépend de la façon dont vous définissez "phrase", mais vous voulez probablement
std :: getline
.Utilisez-vous C ou C ++? Le code que vous avez publié est le code C.