#include std::string input; std::cin >> input;
L’utente vuole inserire “Hello World”. Ma il cin
non funziona nello spazio tra le due parole. Come posso fare in modo che il cin
si cin
di Hello World
?
In realtà sto facendo questo con le strutture e cin.getline
non sembra funzionare. Ecco il mio codice:
struct cd { std::string CDTitle[50]; std::string Artist[50]; int number_of_songs[50]; }; std::cin.getline(library.number_of_songs[libNumber], 250);
Questo produce un errore. Qualche idea?
Devi usare cin.getline()
:
char input[100]; cin.getline(input,sizeof(input));
Non “fallisce”; smette solo di leggere. Vede un token lessicale come una “stringa”.
Usa std::getline
:
int main() { std::string name, title; std::cout << "Enter your name: "; std::getline(std::cin, name); std::cout << "Enter your favourite movie: "; std::getline(std::cin, title); std::cout << name << "'s favourite movie is " << title; }
Si noti che questo non è lo stesso di std::istream::getline
, che funziona con i char
buffer in stile C piuttosto che con std::string
s.
Aggiornare
La tua domanda modificata ha poca somiglianza con l'originale.
getline
tentando di getline
una getline
in un int
, non in una stringa o in un buffer di caratteri. Le operazioni di formattazione dei flussi funzionano solo con l' operator<<
e l' operator>>
. O usate uno di essi (e modificate di conseguenza per l'immissione di più parole), o usate la linea di getline
e convertite lessicale in int
dopo il fatto.
Uso :
getline(cin, input);
la funzione può essere trovata in
#include
Vuoi usare la funzione .getline in cin.
#include using namespace std; int main () { char name[256], title[256]; cout << "Enter your name: "; cin.getline (name,256); cout << "Enter your favourite movie: "; cin.getline (title,256); cout << name << "'s favourite movie is " << title; return 0; }
Ho preso l'esempio da qui . Controllalo per maggiori informazioni ed esempi.
La libreria standard fornisce una funzione di input chiamata ws
, che consuma spazi bianchi da un stream di input. Puoi usarlo in questo modo:
std::string s; std::getline(std::cin >> std::ws, s);
IL MODO
È ansible utilizzare la funzione gets
trovata in cstdio (stdio.h in c):
#include int main(){ char name[256]; gets(name); // for input puts(name);// for printing }
IL MODO C ++
gets
viene rimosso in c ++ 11.
[Consigliato]: Puoi usare getline (cin, name) che si trova in string.h
o cin.getline (name, 256) che si trova in iostream
stesso.
#include #include using namespace std; int main(){ char name1[256]; string name2; cin.getline(name1,256); // for input getline(cin,name2); // for input cout<
Questa è una vecchia domanda, ma qualcuno può dirmi se la mia soluzione non è corretta:
std::string s, temp; std::stringstream ss; while(std::cin>>temp){ ss<