在我的 C++ 类简介中,我们被要求编写一个使用指针返回字符串长度的函数。我编写的代码(请参阅下面的完整代码)似乎工作正常,但这是我不明白的地方。
我认为在控制台中输入"is"后跟 Ctrl-Z(我使用的是 Windows 10)会停止输入。但是,在按下 Ctrl-Z -> Enter 后,控制台仍会等待进一步的输入。我必须在"is"之后开始一个新行,按 Ctrl-Z 然后再次按 Enter 停止输入。
为什么会这样?有没有办法在只按 Ctrl-Z 而没有任何两个新行后停止输入?
我在这里阅读了几篇关于 cin 的文章,包括 this , this , 和 this , 但他们似乎没有回答我的问题。
#include "pch.h"
#include <iostream>
using namespace std;
unsigned strlen(const char *str)
{
int count = 0;
while (*str != '\0') { str++; count++; }
return count;
}
int main()
{
char str[100] = {};
char *pchar;
pchar = str;
while (cin >> *pchar) pchar++;
pchar = str;
cout << '\n' << strlen(pchar);
return 0;
}
最佳答案
如果在输入一些其他文本后按 Ctrl-Z,它会刷新行缓冲区(它不会设置文件结束条件)。
必须连续按两次;或者在换行后按它;导致文件结束条件发生。
您的误解与 Windows 控制台行为有关,与 C++ 流本身无关。
关于c++ - while (cin >> *pchar) 在 Ctrl-Z 之后等待进一步输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53371127/