1
votes

Saisissez une phrase en C ++

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


2 commentaires

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.


3 Réponses :


6
votes

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).


4 commentaires

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.



6
votes

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);


1 commentaires

cela semblait mieux fonctionner que d'utiliser getline, merci!



1
votes

Essayez comme ceci:

#include <iostream>
#include <string>

int main() {
    std::string st;
    std::cout << "Enter a sentence: ";
    getline(std::cin, st);
    std::cout<< st;
}


0 commentaires