gpt4 book ai didi

c++ - 输出缓冲区和 Ctrl+C 退出程序

转载 作者:行者123 更新时间:2023-11-30 05:45:04 28 4
gpt4 key购买 nike

如果我有一个像这样的简单程序;

#include <iostream>
#include <fstream>
using namespace std;

int main(){

ofstream output("huh.txt");

int a;

while(true){
cin >> a;
output << a << endl;
}


}

如果我输入

2
3
4
5
6
7

然后按Cntrl+C退出程序,huh.txt中会保存的是:

2
3
4
5
6
7
7
7
7
7

我的主程序与此类似。它需要来自用户的连续输入以放入输出文件。唯一的问题是当使用 Cntrl+C 退出时,输出通常如上所示重复。究竟是如何处理 Cntrl+C 和“输出”的缓冲区,使得 7 比平时多输出 4 次?通过 Cntrl+C 退出程序通常是个坏主意吗?

最佳答案

我可以在带有 MSVC 2013 的 Windows 上重现该案例,但不能在 Linux 上重现。

Ctrl+C 导致 cin>>a 失败并设置文件结束标志。因此 a 不会被覆盖。当您永远循环而不查看 cin 的状态时,您将继续输出最后一个(未更改的)有效值。

Ctrl+C 同时导致程序中断。这几乎是立竿见影的,但只是几乎。比如在windows中,Ctrl+C的处理是by launching a separate thread ,离开主线程继续他正在做的事情,直到它结束。所以无限循环将被终止信号打断,但它仍然可以执行一些迭代。

避免此问题的最简单方法是正确处理输入错误:

while (true){    
if (cin >> a)
output << a << endl; // output only if input was successful
}

关于c++ - 输出缓冲区和 Ctrl+C 退出程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29525453/

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