c++ - while (cin >> *pchar) 在 Ctrl-Z 之后等待进一步输入

标签 c++ cin

在我的 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++ 流本身无关。

另请参阅:Why do I require multiple EOF (CTRL+Z) characters?

关于c++ - while (cin >> *pchar) 在 Ctrl-Z 之后等待进一步输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53371127/

相关文章:

c++ - 在运行时检查只有一种类型和 void* 的继承

c++ - 我应该向现有代码库添加异常处理吗?

c++ - 如何隐藏数独表中的数字?

c++ - 为什么 g++ 在编译时给我冲突错误?

c++ - cin.get() 和 cin.getline() 的区别

c++ - 将提示字符串转换为整数

c++ - 在 C++ 中初始化静态字符串成员

c++ - Clang 的 libc++:在 std::chrono::duration 的定义中使用 long long

c++ - 为什么 cin 会导致该程序挂起?

C++ Diamond 控制台输出问题