skipping cin.get() and cin.ignore()

skipping cin.get() and cin.ignore()

本文关键字:cin ignore and get skipping      更新时间:2023-10-16

出于某种原因,我的程序跳过了代码片段cin.get();cin.ignore();。我不知道为什么会发生这种情况,因为这两个片段仅在主()范围内而不是在if语句中。

这是相关的代码片段:

input.open(inputFileName);
if (input.fail())
{
    cout << "Error: failed to open '" << inputFileName << "'.nn";
    cout << "Press '' to end the program...";
    cin.get(); //cin.ignore() also does nothing.
    input.close();
    exit(1);
}

可以在此处找到其余的源代码:http://pastebin.com/xy0qmvbq

cin >> inputFileName;

使用该命令,用户将键入一些"东西",然后点击Enter。那将把"东西"加上一个新线字符,并进入输入缓冲区。然后,"东西"将被存储到InputfileName中,并且Newline字符将留在那里。这就是cin.get()和cin.ignore()读取的内容,它们没有被跳过。

您发布的代码的一部分绝对工作正常,在这种情况下,cin.get()在这种情况下不忽略Bieng。

尝试:

std::string dummy;
getline(std::cin,dummy);

或(如果您还没有准备就绪):

cin.ignore(1000,'n'); 

cin.ignore(1000,' n');删除CIN缓冲区中的所有字符,直到它在CIN缓冲区中找到一个" n"字符或达到忽略/删除字符的最大值(在这种情况下为1000)。