Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cin.get()和cin.put()的行为 下面是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; }_C++_Buffer_Iteration_Iostream - Fatal编程技术网

cin.get()和cin.put()的行为 下面是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; }

cin.get()和cin.put()的行为 下面是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; },c++,buffer,iteration,iostream,C++,Buffer,Iteration,Iostream,我知道为什么第一个输出是这样来的,但是第二个呢?另外,当我只按一次键时,为什么会出现两行新行。我能得到一些帮助吗?查看循环条件-每次循环迭代调用cin.get()两次。缺少的字符将与'\0'进行比较并丢弃。查看循环条件-每次循环迭代调用cin.get()两次。缺少的字符将与'\0'进行比较并丢弃。正如您所知,cin.get()在循环中被调用两次,而cin.put(c)仅被调用一次。由于您键入了两次hello,并且每次跳过一个字符,因此输出的字符序列是:(跳过的字符在括号中): h(e)l(l)o

我知道为什么第一个输出是这样来的,但是第二个呢?另外,当我只按一次键时,为什么会出现两行新行。我能得到一些帮助吗?

查看循环条件-每次循环迭代调用
cin.get()
两次。缺少的字符将与
'\0'
进行比较并丢弃。

查看循环条件-每次循环迭代调用
cin.get()
两次。缺少的字符将与
'\0'
进行比较并丢弃。

正如您所知,
cin.get()
在循环中被调用两次,而
cin.put(c)
仅被调用一次。由于您键入了两次
hello
,并且每次跳过一个字符,因此输出的字符序列是:(跳过的字符在括号中):
h(e)l(l)o
(h)e(l)l(o)

正如您所知,
cin.get()
在循环中被调用两次,而
cin.put(c)
只被调用一次。由于您键入了两次
hello
,并且每次跳过一个字符,因此输出的字符序列是:(跳过的字符在括号中):
h(e)l(l)o

(h)e(l)l(o)

第一次,
cin.get()
阻止do-while循环代码内的线程。 获得输入后,按enter键,会发现出现两个换行符。这是因为循环代码被阻塞时,do中的
cin.get()
,当您按enter键时,
c
将变成
'\n'
。接下来发生的是
cout.put('\n')


此时,do while条件中的
cin.get()
阻塞了线程,因此您最终跳过了
h
、第一个
l
o
,第一次,
cin.get()
阻塞了do while循环代码中的线程。 获得输入后,按enter键,会发现出现两个换行符。这是因为循环代码被阻塞时,do中的
cin.get()
,当您按enter键时,
c
将变成
'\n'
。接下来发生的是
cout.put('\n')


此时,do while条件中的
cin.get()
阻塞了线程,因此您最终跳过了
h
、第一个
l
o

这两个关键点。这些是:-

  • 当我们按下字符串末尾的
    return
    键时,它也是 存储在缓冲区中,并与存储的所有字符一起推送 在它的标准输出
  • 输出取决于是否有en个偶数或奇数个 字符串中的字符(包括
    返回
    键)
  • 说字符串
    你好并点击
    return
    。然后,我们再次进入
    你好
    并点击
    返回
    键。在这两种情况下,字符总数(在任何一种情况下)都是
    7
    ,而不是
    6
    。在这种情况下,输出为:-

    hello!
    hlo
    
    hello!
    el!_
    
    其中
    表示将要显示的光标。这是因为
    do while
    循环中的
    cin.get()
    命令读取第一个字符串后,按下了
    return
    键,因此打印了该字符串。之后,控件转到
    do while
    条件,并读取第二个字符串的
    h
    。这就是第二次输出中未打印
    h
    的原因。之后,将显示每个偶数字符。这就是为什么
    已打印。之后,
    do while
    条件检测到
    return
    键,将执行暂停在
    位置


    现在,如果您按一次
    return
    键,您将获得两次
    return
    ,因为一次输入
    return
    ,另一次则是输出。

    对于此问题,应记住两个关键点。这些是:-

  • 当我们按下字符串末尾的
    return
    键时,它也是 存储在缓冲区中,并与存储的所有字符一起推送 在它的标准输出
  • 输出取决于是否有en个偶数或奇数个 字符串中的字符(包括
    返回
    键)
  • 说字符串
    你好并点击
    return
    。然后,我们再次进入
    你好
    并点击
    返回
    键。在这两种情况下,字符总数(在任何一种情况下)都是
    7
    ,而不是
    6
    。在这种情况下,输出为:-

    hello!
    hlo
    
    hello!
    el!_
    
    其中
    表示将要显示的光标。这是因为
    do while
    循环中的
    cin.get()
    命令读取第一个字符串后,按下了
    return
    键,因此打印了该字符串。之后,控件转到
    do while
    条件,并读取第二个字符串的
    h
    。这就是第二次输出中未打印
    h
    的原因。之后,将显示每个偶数字符。这就是为什么
    已打印。之后,
    do while
    条件检测到
    return
    键,将执行暂停在
    位置


    现在,如果你按一下
    return
    键,你会得到
    return
    两次,因为一次输入
    return
    ,另一次是输出。

    这是有道理的,但为什么我在两行不同的输入中会出现这种情况?当我连续地给出相同的输入时(我不是),应该会发生这种情况,但在这种情况下,它不会发生