以下是C ++中的代码,它以字母作为输入并将其作为输出。这种连续直到不按Ctrl+C
,即^C
。
#include<iostream>
using namespace std;
int main(void)
{
char c;
do
{
c = cin.get();
cout.put(c);
}while((c = cin.get())!='\0');
return 0;
}
问题是以下输出: -
hello
hlo
hello
el
我知道为什么第一个输出会以它的方式出现,但第二个输出呢?另外,当我只按enter
键一次时,为什么还有两个新行。我可以得到一些帮助吗?
答案 0 :(得分:2)
第一次,cin.get()
阻止do-while循环代码中的线程。
获得输入后,按Enter键,您会发现有2个换行符。这是因为do-while循环代码中的cin.get()
已被阻止,当您按Enter键时,c
将变为'\n'
。接下来会发生什么cout.put('\n');
。
此时,您在do-while条件中cin.get()
阻止了您的主题,因此您最终会跳过h
,第一个l
和{{1} }。
答案 1 :(得分:1)
查看循环条件 - 每次循环迭代调用cin.get()
两次。将丢失的特征与'\0'
进行比较并丢弃。
答案 2 :(得分:0)
如您所知,cin.get()
在循环中被调用两次,而cin.put(c)
只被调用一次。由于您键入hello
两次,并且每次都跳过一个字符,因此输出的字符序列为:(跳过的字符在括号中):
h (e) l (l) o
(h) e (l) l (o)
答案 3 :(得分:0)
对于这个问题,应该牢记两个关键点。这些是: -
return
键时,它也是
存储在缓冲区中并与所有存储的字符一起推送
在它上面的标准输出。return
键)输入字符串hello!
并点击return
。然后,我们再次输入hello!
并点击return
键。在这两种情况下,字符的总数(在任何一种情况下)都是7
而不是6
。在这种情况下,输出为: -
hello!
hlo
hello!
el!_
其中_
表示将显示的光标。这是因为在return
循环中cin.get()
命令读取了第一个字符串后的do-while
键,因此它被打印出来。之后,控件转到do-while
条件并读取第二个字符串的h
。这是h
未在第二个输出中打印的原因。之后,每个偶数字符都会显示出来。这就是打印!
的原因。之后,return
条件检测到do-while
密钥,该条件暂停_
位置的执行。
现在,如果您点击return
键一次,则会return
两次,因为一旦输入return
,另一次就是输出。