#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;
}
当我输入时:
12345678901234567890
输出是:
123456789
似乎cont
是空的。有人可以解释一下吗?
答案 0 :(得分:7)
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;
}
答案 1 :(得分:3)
如果您读入的变量不足以容纳整行,则输入操作将失败,并且在您致电cin.clear()
之前,流将不再读取任何内容。
您应该使用std :: string来保存数据。它将调整自身大小以匹配输入。
std::string test;
std::string cont;
getline(cin, test);
getline(cin, cont);
答案 2 :(得分:0)
标准表示您可以获得比在以下条件下输入的“更短”的行:
EOF
喜欢的角色。 我的猜测是将char[]
更改为string (STL)
,然后尝试一下。此外,当您说您一次输入12345678901234567890
时,所有内容都会进入test
。由于test
只有10个字节长,因此将输出123456789。由于为istream类设置了failbit
并且阻止了进一步的输入,因此没有输入到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;
}
答案 3 :(得分:0)
从某处复制
cin.getline Extracts characters from the input sequence and stores them as a c-string into the array beginning at s.
提取字符,直到提取了(n-1)个字符或找到了分隔字符(如果指定了此参数则为delim,否则为'\ n')。如果在输入序列中到达文件末尾或者在输入操作期间发生错误,则提取也会停止。
我相信你在输入12345678901234567890之后按两次输入
答案 4 :(得分:0)
The getline() function has the following two syntaxes:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
s: Pointer to an array of characters where extracted characters are stored as a c-string.
n: Maximum number of characters to write to s (including the terminating null character).
delim: Explicit delimiting character
The return type of this function is istream object (*this)
.
In the above scenario, the data is read into the pointer to an array of character, test, which is converted at runtime and hence can store up to 50 characters as declared in the cin.getline(test, 50)
.
If you want to achieve your desired result kindly use n=10