while 循环中的 C++ cin.ignore 和 getline

标签 c++

我对编程非常陌生,并且在 while 循环中使用 getline 时遇到问题。当我计算类(class)变量时,第一个字母丢失了。摆脱 cin.ignore 会将其发送到无限循环。

这是我到目前为止所拥有的:

#include <iostream>
#include <string>
using namespace std;
int main (){
   string answer = "Yes";
   string course;

   while (answer == "Yes"){
      cin.ignore();
      cout<< "Enter a course name: ";
      getline (cin, course);
      cout<< course << endl;

      cout<< "Continue ('Yes' or 'No')? ";
      cin>> answer;
      cout<< answer << endl;
   }

   return 0;
}

最佳答案

ignore移至循环底部。它用于删除 cin >> 运算符留在缓冲区中的换行符,因此只有在使用 cin >> 后才需要它。

您还应该将参数传递给 ignore 以忽略所有内容,直到您输入换行符,以防他们在该行中输入的不仅仅是"is"或“否”。您可以通过以下方式做到这一点:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

请参阅此处的工作示例:ideone .

关于while 循环中的 C++ cin.ignore 和 getline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50052782/

相关文章:

c++ - Opencv 示例代码在 Visual Studio 中不起作用

c++ - 模板参数名称作为基类

c++ - 在 VS (2010) 中使用标准 'main' 条目构建和运行 C++ 控制台应用程序

c++ - 使用元数据/继承来提取跨多个类的代码

c++ - 并排 : 3rd Party Dll refers to two versions of MSVCR80. DLL

c++ - 无法在 Qt Creator 中启动 gdb.exe

c++ - 将 std::array 与传统数组 C++ 进行比较

c++ - 如何将可变数量的参数传递给 lambda 函数

c++ - 如何从 std::basic_ios 为 OS X 上的 clang 获取文件描述符?

c++ - 从成员函数返回字符串指针