Cin.Getline(char,int)在循环中被跳过
cin.getline(char, int) gets skipped when in a loop
这是我试图在turboc 3.0上执行的代码(是的,我知道它很古老,但无济于事),当程序进入循环时,它会跳过每次的价值,包括第一次尝试。任何帮助将不胜感激,但请避免询问为什么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<<"nn";
}
}
,即使我使用cin.get(var),其中var是一个角色,我仍然会得到像心,钻石甚至笑脸的怪异结果。
您会得到奇怪的结果,因为您没有使用空字符终止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()
之后,它将冲洗出缓冲区中存在的任何新线字符。
它跳过y
的值
cin >> x
读取输入,直到找到一个不是数字的东西 - 在这种情况下,是线结束字符。该字符留在流中。
getline
读取输入,直到找到一个线结束字符(或流的末端)。由于您将其中一个留在流中,因此立即找到它并且没有阅读任何内容。
您可以致电cin.ignore(-1,'n')
在阅读x
之后忽略第一行的其余部分(假设您的史前库的行为与现代图书馆一样)。
我仍然得到奇怪的结果,例如心脏,钻石甚至笑脸
cout.write(y, 10)
是错误的 - y
中最多有9个有效字符,其次是NULL终结器。您希望cout << y
将其视为无效的字符串并仅打印有效字符。
相关文章:
- 在 std::getline 和 std::cin 期间卡在循环中
- std::getline没有在while循环中重新请求用户输入
- 而循环跳过 cin.getline() 对于 C 字符串
- 如何在不循环的情况下使用getline读取文件
- getline() 在 while 循环条件中如何计算为真或假?
- Getline 循环禁用打印到 TXT
- 虽然带有 getline 的循环不会因用户输入而结束
- C 使用getline()内部循环以在CSV文件中读取
- 如何在 for 循环中解决潜在的 getline() 问题,数组的第一个索引没有显示?
- 如何使 getline 命令在 while 循环中工作
- 当使用文件中的getline时,循环仅循环一次
- C++ 为什么 getline() 会结束 while 循环
- Getline 在循环中不起作用
- Cin.Getline(char,int)在循环中被跳过
- Getline 在将文件重定向到标准输入时会导致无限循环
- Visual Studio 2010 中'getline'上的无限循环
- 如何自动停止 getline() 循环在 cin 上
- C++ cin.getline() 不能在循环中工作
- 而循环构造与 getline 函数相结合,一直持续到 EOF
- 用 getline 循环填充数组