c++ - while (cin >> *pchar) 等待 Ctrl-Z 之后的进一步输入
问题描述
在我的 C++ 类简介中,我们被要求编写一个使用指针返回字符串长度的函数。我编写的代码(请参阅下面的完整代码)似乎工作得很好,但这是我不明白的事情。
我认为在控制台中输入“是”后跟Ctrl- Z(我使用的是 Windows 10)会停止输入。但是,在按下Ctrl- Z->之后Enter,控制台仍然等待进一步的输入。我必须在“是”之后开始一个新行,按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++ 流本身有关。
推荐阅读
- solr - 调优 solr ConcurrentMergeScheduler
- javascript - 如何在 Twitch 扩展商店中上传 Twitch 面板扩展?
- maven - 无法使用 Maven 构建具有 gRPC、Protobuf 和 BoringSSL 到 JAR 的工作 Java 应用程序
- java - 如何在 Jenkins 上为 Maven Java 构建设置默认时区?
- python - 如何在不使用布尔索引的情况下迭代熊猫系列
- django - 如果使用 Gunicorn 运行 Django,则“NoneType”对象没有属性“autodiscover_tasks”
- php - 修改图像大小调整脚本以接受 PNG 并将新图像添加到数组中
- javascript - 如何在数组中正确使用 map()?
- r - 如何找到等于给定列的所有列?
- javascript - 如何获得像 sql 中的联合列表?