首页 > 解决方案 > while (cin >> *pchar) 等待 Ctrl-Z 之后的进一步输入

问题描述

在我的 C++ 类简介中,我们被要求编写一个使用指针返回字符串长度的函数。我编写的代码(请参阅下面的完整代码)似乎工作得很好,但这是我不明白的事情。

我认为在控制台中输入“是”后跟Ctrl- Z(我使用的是 Windows 10)会停止输入。但是,在按下Ctrl- Z->之后Enter,控制台仍然等待进一步的输入。我必须在“是”之后开始一个新行,按Ctrl-Z然后Enter再次点击以停止输入。

为什么会这样?有没有办法在按下后停止输入Ctrl-Z没有两条新线中的任何一条?

我在这里阅读了有关 cin 的几篇文章,包括thisthisthis,但它们似乎没有回答我的问题。

#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;
}

标签: c++cin

解决方案


如果在输入其他文本后按Ctrl- Z,它会刷新行缓冲区(它不设置文件结束条件)。

您必须连续按两次;或在换行符后按它;导致文件结束条件发生。

您的误解与 Windows 控制台行为有关,而不是与 C++ 流本身有关。

另请参阅:为什么我需要多个 EOF (CTRL+Z) 字符?


推荐阅读