gpt4 book ai didi

c++ - 涉及文件末尾时保持控制台屏幕

转载 作者:行者123 更新时间:2023-11-30 05:34:44 24 4
gpt4 key购买 nike

这是接受未知编号的程序的缩小版本。整数输入。之前用过cin.get()没用,最后用了this但不幸的是它也没有用。我正在使用 Notepad++产生命令提示符来运行我的程序。这与 Notepad++ OR CTRL-Z(文件结束)字符有关吗?

编辑:使用 cmd.exe 工作正常

vector<int> vint;
int val = 0;

cout << "Enter integers..... Press CTRL and \'Z\' when done entering!"
<< "\n GO... : ";

while(cin >> val)
vint.push_back(val);

if (vint.size() > 1)
{
...
}
else
{
...
}

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

最佳答案

当您在控制台程序中输入 Ctrl+Z 时,您就知道它是文件的末尾。从 cin 进行的任何后续读取都注定会失败。

它从命令行运行,因为命令处理器在程序结束时不会关闭窗口。

可能的解决方案:

可移植的方法是通过检查特殊值(例如 0)来干净地中断循环。

如果这不可能,另一种方法是获得对用户输入的更多控制并将行读入字符串。然后,您可以在输入空行时结束循环。这是我认为对于用户来说最直观的做法。您所要做的就是使用 stringstreams 解析非空字符串(如果输入了非数值,最终会报错)。

一个不太完美的方法可能是指示用户输入一些非数字值来结束循环。然后,您必须清除无效输入会产生的故障:

 while (std::cin >> val ) {
...
}
if (std::cin.eof()) // display the special case
std::cout <<"End of file encountered !" << std::endl;

std::cout << "Press a key...";

std::cin.clear(); // clear the error state of cin
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();

令人惊讶的是,当输入 Ctr+Z 时,这可以在 Windows 上使用 MSVC2015 编译:一旦文件结束状态被清除,控制台就会神奇地恢复,您可以继续阅读。但是,您不能假设它适用于像 Notepad++ 这样的控制台前端,也不能适用于标准库的其他实现,也不能适用于其他操作系统。

关于c++ - 涉及文件末尾时保持控制台屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com