#include<iostream>
using namespace std;
int main()
{
char test[10];
char cont[10];
cin.getline(test,10);
cin.getline(cont,10);
cout<<test<<" is not "<<cont<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我输入:
12345678901234567890
输出是:
123456789
这似乎cont是空的.有人可以解释一下吗?
istream::getline如果输入太长则设置失败位,这会阻止进一步输入.将您的代码更改为:
#include<iostream>
using namespace std;
int main()
{
char test[10];
char cont[10];
cin.getline(test,10);
cin.clear(); // add this
cin.getline(cont,10);
cout<<test<<" is not "<<cont<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您读入的变量不够大,无法容纳整行,则输入操作将失败,并且流将不会再读取任何内容,直到您调用cin.clear()。
您应该使用 std::string 来保存数据。它将调整自身大小以匹配输入。
std::string test;
std::string cont;
getline(cin, test);
getline(cin, cont);
Run Code Online (Sandbox Code Playgroud)
该标准规定,在以下条件下,您可以获得比您输入的“更短”的行:
EOF在某个地方碰到了一个类似的角色。 我的猜测是将 更改char[]为 astring (STL)然后尝试一下。另外,当你说你12345678901234567890一次性输入时,所有的内容都会进入test。由于test只有 10 个字节长,因此将输出 123456789。failbit由于 cont是为 istream 类设置的,因此不会向 cont 输入任何内容,并且会阻止进一步的输入。这段代码适用于我std::string。
#include<iostream>
#include <string>
using namespace std;
int main()
{
//char test[10];
//char cont[10];
string test;
string cont;
cin >> test;
cin >> cont;
//cin.getline(test,10);
//cin.getline(cont,10);
cout<<test<<" is not "<<cont<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)