键盘在关闭前中断向终端添加数字



来自python的C++新手。当我编译并运行以下代码,然后在输入任何内容之前按Ctrl+C时,我看到终端仍然打印You entered 0^C

#include <iostream>
int main()
{
int num1;
std::cin >> num1;
std::cout << "You entered " << num1 << "n";
}

首先,来自Python,当std::cin没有收到输入时,我看不到抛出错误的好处,也不明白为什么允许程序继续执行以下行的动机std::cin不工作时,不抛出错误的原因是什么

其次,这种行为是否意味着num1在初始化之前的值为零我最初的想法是,也许num1被赋予了默认值0,即使它没有初始化。然而,下面的代码似乎打破了这种猜测:当我在编译并运行下面的代码后按下Ctrl+C时,屏幕会打印You entered 24^C,有时打印You entered 2^C,有时只打印You entered ^C。如果重新生成项目,则会显示一个不同的数字。

#include <iostream>
int main()
{
int num1, num2, num3;
std::cin >> num1 >> num2 >> num3;
std::cout << "You entered " << num1 << ", " << num2 << ", " << num3 << "n";
}

我认为这可能与缓冲区有关,但添加std::cin.ignore()并不能阻止这种行为。

这是C++的问题,还是与操作系统如何处理键盘中断有关?我觉得我以前可能看到过数字在^C上运行,同时中断python脚本,但没有想过

num1未初始化,这意味着它包含内存中的任何随机值。

当按下control-c时,std::cin >> num1;失败。然后下一行将打印之前num1中的一些随机值。

正确的版本应该是

int num1 = 0;
if (std::cin >> num1)
std::cout << "You entered " << num1 << "n";

您可以使用std::cin.ignorectd::cin.clear来清除行的末尾。例如,在这种情况下,用户应该输入integer,但却输入文本。

在下面的示例中,如果在应为integer时输入文本,则除非清除该行,否则cin将继续尝试读取该行。

for (int i = 0; i < 3; i++)
{
std::cout << i << " - Enter integer:n";
if (std::cin >> num1)
{
std::cout << "You entered " << num1 << "n";
}
else
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
}

相关内容

  • 没有找到相关文章

最新更新