这是我试图在TurboC ++ 3.0上执行的代码(是的,我知道它很古老但无法帮助它),当程序进入循环时,它每次跳过y的值,包括第一个尝试。任何帮助将不胜感激,但请通过询问为什么TurboC ++ 3.0避免将盐揉入伤口。提前谢谢。
void main()
{
int x, z;
char y[10];
for (int i=0;i<5;i++)
{
cout<<"\nX:";
cin >> x;
cout<<"\nY:";
cin.getline(y,10);
cout<<"\nZ:";
cin>>z;
}
for(i=0;i<5;i++)
{
cout<<x<<"\n";
cout.write(y, 10)<<"\n";
cout<<z<<"\n\n";
}
}
即使我使用cin.get(var),其中var是一个角色,我仍然会得到奇怪的结果,如心脏,钻石甚至是笑脸。
答案 0 :(得分:0)
你得到了奇怪的结果,因为你没有用空字符终止你的c样式字符串。('\ 0')。
您遇到的问题是因为设置了失败位或eof位。要删除它,请执行以下操作: -
您可以使用
cin.clear() ;
清除是否设置了任何错误位,然后使用
cin.ignore(100, '\n') ;
// 100 is just a random no, change it depending on your size of input.
忽略流中的任何不相关字符。
或者您可以执行以下操作: -
在cin>>x
之后输入cin.ignore()
,它将清除缓冲区中存在的任何换行符。
答案 1 :(得分:0)
它会跳过y的值
cin >> x
读取输入,直到找到不是数字的东西 - 在这种情况下,是行尾字符。该字符留在流中。
getline
读取输入,直到找到行尾字符(或流的结尾)。由于您在流中留下了一个,因此它会立即找到它并且不会读取任何内容。
您可以在阅读cin.ignore(-1,'\n')
后调用x
忽略第一行的其余部分(假设您的史前库与现代库的行为相似)。
我仍然得到奇怪的结果,如心脏,钻石甚至笑脸
cout.write(y, 10)
错误 - y
中有多达9个有效字符,后跟空终止符。您希望cout << y
将其视为以空字符结尾的字符串,并仅打印有效字符。