cin.get()和cin.put()的行为
Behaviour of cin.get() and 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())!=' ');
return 0;
}
问题在于以下输出:-
hello
hlo
hello
el
我知道为什么第一个输出是这样的,但第二个呢?另外,当我只按一次enter
键时,为什么会有两条新行。我能得到一些帮助吗?
第一次,cin.get()
在do-while循环代码中阻塞线程。输入后,按enter键,会出现2个换行符。这是因为do-white循环中的cin.get()
代码一直处于阻塞状态,当您按enter键时,c
将变为'n'
。接下来发生的是cout.put('n');
。
此时,do-white条件中的cin.get()
阻塞了线程,因此最终会跳过h
、第一个l
和o
。
查看循环条件-每次循环迭代调用cin.get()
两次。将缺失的字符与' '
进行比较并丢弃。
cin.get()
在循环中被调用两次,而cin.put(c)
只被调用一次。由于您键入了两次hello
,每次跳过一个字符,因此输出的字符序列为:(跳过的字符在括号中):h (e) l (l) o
(h) e (l) l (o)
这个问题需要记住两个关键点。这些是:-
- 当我们按下字符串末尾的
return
键时,它也是存储在缓冲区中,并与存储的所有字符一起推送在标准输出中 - 输出取决于是否存在偶数或奇数字符串中的字符(包括
return
键)
假设输入了字符串hello!
并且命中了return
。然后,我们再次输入hello!
并按下return
键。在这两种情况下,字符总数(在任何一种情况下)都是7
,而不是6
。在这种情况下,输出为:-
hello!
hlo
hello!
el!_
其中CCD_ 28表示将被显示的光标。这是因为do-while
循环中的cin.get()
命令读取了第一个字符串之后的return
键,因此打印了它。之后,控件转到do-while
条件,并读取第二个字符串的h
。这就是h
没有打印在第二个输出中的原因。然后显示每个偶数字符。这就是打印!
的原因。之后,CCD_ 36键被暂停在CCD_ 38位置执行的CCD_ 37条件检测到。
现在,如果按一次return
键,就会得到两次return
,因为一次输入return
,另一次是输出。
相关文章:
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 使用 cin.get() 初始化字符数组
- 编写 cin.get() 以接收字符数组时出现问题
- 使用 cin.get 读取字符数组
- cin.get()的返回类型
- 在循环中使用 cin.get() 输入字符串
- 为什么 cin.get(char, int) 不会溢出?
- cin.get() 导致"no instance of overloaded function"错误
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 为什么程序在 cin 之后跳过 cin.get()?
- 如何终止 std::cin.get() 的 ''
- 使用 cin.get() 读取字符
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- cin.get()函数在C 中
- 如何在 c++ 中使用 cin.get() 给出更多数字?
- (m = cin.get())!=EOF&m = cin.get()!=EOF 之间的差异
- 为什么我的应用程序即使我的应用程序也关闭,即使我有cin.get();
- C 使用CIN.Get()暂停此程序
- cin.get() 之后的回车;C++
- 我是否缺少 cin.get() 的东西