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.