在 C++ 中按 ctrl+D 在 (cin>>i) 循环中时发生了什么?
What happened when press ctrl+D in while(cin>>i) loop in C++?
我是c++新手,对这个问题感到有点困惑。我使用Mac OS X和命令"g++ -std=c++11"来编译代码。
可能这个问题太宽泛了,我不知道,但是如果有人可以用下面的例子解释一下,请?
int temp;
while (cin >> temp) {
cout << temp << endl;
}
输入
1 2 3<ENTER>
打印
1
2
3
,然后按
<CTRL+D>
戒烟。但是如果我输入
1 2 3<CTRL+D>
打印
1D
2
后面跟着输入字符"3",然后按
<ENTER>
最后一个字符"3"将被打印。然后按
<CTRL+D>
再次退出。
除此之外,还有一个类似的例子如下:
vector<int> list; int temp;
while (cin >> temp) {
list.push_back(temp);
}
for (auto e : list) {
cout << e << endl;
}
输入
1 2 3<ENTER><CTRL+D>
它打印
1D
2
3
我的问题是:
这三种情况下发生了什么然后我按
<CTRL+D>
和
<ENTER>
?
为什么在第二种和第三种情况中有一个"D"字符?如何防止这种情况发生呢?
这可能是由于控制台输出与您的输出重叠。
当您按下ctrl+D
时,控制台打印^D
,但随后立即打印返回字符('r'
)。这意味着在此之后要打印的所有内容都将在^D
上打印。
你的程序首先打印1
,所以它只与^
重叠,留下D
完整。尝试插入一个两位数,您将看到D
消失。
有些控制台擦除返回字符后的行,但有些不像您的控制台那样。
<标题> 解决方案(1)在开始打印列表之前,您可以简单地打印'n'
(std::endl
)。这将在控制台上留下难看的^D
,但它不会重叠你的打印。
vector<int> list; int temp;
while (cin >> temp) {
list.push_back(temp);
}
cout << endl; // Print before the list.
for (auto e : list) {
cout << e << endl;
}
(2)您可以先打印空行来删除该打印。只需打印:" r"
(即,两个空格然后一个返回字符)。
int temp;
while (cin >> temp) {
cout << "r r" << temp << endl; // Print in each line
}
标题>
相关文章:
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 这C++代码中发生了什么C++(指数函数)
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 从"LLONG_MAX 秒"构造 std::chrono::毫秒变量时发生了什么?
- 这个片段中关于 n 在 pc[i] 中的表示发生了什么
- istringstream,num1 和 num2 在这里发生了什么?
- 究竟发生了什么,我们需要在 c++ 中双重调度/访客
- libstdc++的make_shared布局在gcc 4.x和gcc 6.x之间是否发生了变化?
- 我是否能够确定在部署一个程序后发生了什么,我在数组末尾写入?
- 为什么我的 int 在 C++ 程序中间发生了变化?
- 这个阶乘程序内部发生了什么?
- C++ - *(int**) 地址?这里发生了什么?
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 在使用VS2010构建ACE和TAO(CORBA)时发生了许多错误
- 为什么在波纹管程序中发生了从字符串常量到'char*'的警告已弃用的转换
- 让对象知道它创建的 show 函数中发生了什么
- 这里的矢量数组发生了什么?
- 增加顶级常量指针时发生了什么