std :: cin用空格input?
#include <string> string input; cin >> input;
用户想要input“Hello World”。 但是在这两个词之间的空间里, cin
失败了。 我怎样才能让整个Hello World
cin
?
我实际上是用structs和cin.getline
做这个似乎不工作。 这是我的代码:
struct cd { string CDTitle[50]; string Artist[50]; int number_of_songs[50]; }; cin.getline(library.number_of_songs[libNumber], 250);
这产生了一个错误。 有任何想法吗?
你必须使用cin.getline()
:
char input[100]; cin.getline(input,sizeof(input));
它不“失败”; 它只是停止阅读。 它把一个词汇记号看作一个“string”。
使用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; }
请注意,这与std::istream::getline
,它使用C风格的char
缓冲区而不是std::string
s。
更新
你编辑的问题与原文有些相似。
你正试图把int
换成int
,而不是string或字符缓冲区。 stream的格式化操作只适用于operator<<
和operator>>
。 或者使用其中的一个(并根据多字input进行调整),或者使用getline
和词法转换为事后的int
。
使用 :
getline(cin, input);
该函数可以在中find
#include <string>
你想在cin中使用.getline函数。
#include <iostream> 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; }
从这里拿了榜样。 看看更多的信息和例子。
C的方式
你可以使用cstdio中的gets
函数(c中的stdio.h):
#include<cstdio> int main(){ char name[256]; gets(name); // for input puts(name);// for printing }
C ++的方式
gets
被删除在C + + 11。
[推荐]:你可以使用string.h
getline(cin,name)或iostream
本身的cin.getline(name,256) 。
#include<iostream> #include<string> using namespace std; int main(){ char name1[256]; string name2; cin.getline(name1,256); // for input getline(cin,name2); // for input cout<<name1<<"\n"<<name2;// for printing }
标准库提供一个名为ws
的input函数,它从inputstream中消耗空白。 你可以像这样使用它:
std::string s; std::getline(std::cin >> std::ws, s);
这是一个老问题,但有人可以告诉我,如果我的解决scheme是不正确的:
std::string s, temp; std::stringstream ss; while(std::cin>>temp){ ss<<temp; ss<<" "; } s = ss.str();
int main(){ char name[20]; gets(name); }
使用gets()采用空格的string(C中的char数组)。