C++ skipping on cin.getline

C++ skipping on cin.getline

本文关键字:getline cin on skipping C++      更新时间:2023-10-16

我的程序输入字符有问题

#include <iostream>
using namespace std;
int  main()
{
int choise;
char word[81];

cin >> choise;
cout << "enter the word:" << endl;
cin.getline(word, 81);
return 0;
}

Visual Studio 将输入打开到"Choise"但是跳过 cin.getline(如果我用 gets_s 替换它,情况也是一样的)。

我试着写cin.get();在"获取线"之前...但是程序没有得到第一个字符(如果我输入"aa",它会得到"a")我能做什么?谢谢

这是因为您输入了一个换行符,以便程序接受您为choice输入的整数,该换行符不会从缓冲区中提取,而是在下一个输入操作中读取。getline调用读取剩余的换行符,并对此感到满意。

有几种方法可以解决您的问题。第一个也是最明显的是对word变量使用 std::string,然后使用正常的输入运算符>>因为这将跳过前导空格(包括换行符)。

另一种解决方案是告诉输入流ignore直到并包括换行符。链接的引用有一个关于如何做到这一点的示例。

输入整数后,按回车键,此输入输入将留在缓冲区中,并用作 getline 的下一个输入,计算机会假设您已完成。在语句之前添加此行getline并重新编译它。 cin.ignore() .