我的while循环似乎忽略了我的getline
My while loops seems to be ignoring my getline
以下是的所有代码
#include <iostream>
#include <string>
#include <windows.h>
#include <stdlib.h>
using namespace std;
void Pdelay(string str)
{
for (char c : str)
{
std::cout << "" << c << "";
Sleep(100);
}
std::cout << 'n';
}
int main()
{
int exit = 1;
while (exit == 1)
{
cout<< "Type somethingn:";
string str;
str.clear();
getline(cin,str);
Pdelay(str);
cout << "nn[1]Type something again"<< endl;
cout << "[2]Exitn:";
cin >> exit;
}
return 0;
}
每当我运行它时,它第一次都能正常工作,当它循环回来时,它跳过getline并继续使用两个cout语句。
使用cin
后,换行符立即保留在缓冲区中,并被随后的getline
"吃掉"。您需要清除额外换行符的缓冲区:
// immediately after cin (need to #include <limits>)
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'n');
这就是为什么将std::cin
和std::getline
结合起来不是一个好主意。顺便说一句,你可以用完全符合标准的C++11编写代码,不需要额外的非库头:
#include <chrono>
#include <iostream>
#include <limits>
#include <string>
#include <thread>
void Pdelay(std::string str)
{
for (char c : str)
{
std::cout << "" << c << "" << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
std::cout << 'n';
}
int main()
{
int ext = 1;
while (ext == 1)
{
std::cout << "Type somethingn:";
std::string str;
str.clear();
std::getline(std::cin, str);
Pdelay(str);
std::cout << "nn[1]Type something again" << std::endl;
std::cout << "[2]Exitn:";
std::cin >> ext;
if(!std::cin) // extraction failed
{
std::cin.clear(); // clear the stream
ext = 1;
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'n');
}
}
我刚刚意识到这个问题以前也被问过(以稍微修改的形式),答案很好:
为什么std::getline()在格式化提取后跳过输入?
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 为什么我的getline不正确读取.csv文件
- 我想让我的控制台更加丰富多彩.如何在用户输入时使用户输入(通过getline获得)
- 我的程序跳过getline(cin,CustInfo),进入CustomerInfo函数中的City.我该怎么修
- 为什么getline正在读取我的整个unicode文件
- 为什么我的程序使用 getline() 跳过步骤
- 为什么 getline() 在我的代码 (c++) 中不起作用
- 我的编译器不允许我使用 getline
- 如何为我的 getline() 修复这个 cin.ignore()
- 我的while循环似乎忽略了我的getline
- C++代码在我的机器上有效,但在我的学校服务器上无效(cin.getline())
- **编译器错误** - getline() 函数不接受第一个参数"std:ifstream"是什么我的问题?
- 在c++中,为什么ifstream getline返回我的.txt文件中的每一个数字,而不是所有的数字
- 我的for循环中的getline和cout语句被截断了