gpt4 book ai didi

读取超过 127 个 ASCII 值时 C++ cin 失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:55 25 4
gpt4 key购买 nike

我创建了一个包含 256 个字符的文本文件,文本文件的第一个字符是 ASCII 值 0,文本值的最后一个字符是 ASCII 值 255。中间的字符从 0 到 255 均匀递增。所以字符 #27 是 ASCII 值 27。字符 #148 应该是 ASCII 值 148。

我的目标是读取此文本文件的每个字符。

我试过用 cin 阅读这个。我尝试了 cin.get()cin.read(),它们都应该读取未格式化的输入。 但是在读取第 26 个字符时都失败了。我想当我使用 unsigned char 时,cin 说它正在读取 read in 255 ,这根本不是真的。当我使用普通签名的 char 时,cin 表示它正在读取 -1。它应该读入与 ASCII 26 等效的任何字符。也许 cin 认为它命中了 EOF?但是我之前在单独的 StackOverflow 帖子上读到 EOF 不是一个可以写的实际字符。所以我不知道为什么 cin 对代表整数 -1 或整数 255 的字符值咳嗽。有人可以告诉我我做错了什么,为什么,最好的解决方案是什么,为什么?

没有太多具体的代码可以粘贴。我尝试了几种不同的非工作组合,所有组合都涉及 cin.get()cin.read()charunsigned char 并在两者之间调用转换为 charint。我没能读完第 26 个字符,除了这个:

unsigned char character;

while ( (character = (unsigned char)cin.get()) != EOF) { ... }

有趣的是,虽然这并没有在第 26 个字符处停止我的 while 循环,但它也没有继续前进。看起来像 cin,无论是 cin.get() 还是 cin.read() 都拒绝在它到达下一个字符的那一刻前进检测到它不喜欢的东西。我也知道存在类似 cin.ignore() 的东西,但我的输入是不可预测的;也就是说,我的文本文件的这 256 个字符只是一个测试用例,真正的输入是相当随机的。这是一个更大的家庭作业的一部分,但这个具体问题与作业无关;我只是停留在过程的一部分。

注意:我是从标准输入流读取的,而不是特定的文本文件。似乎仍然没有直接的解决方案。我不敢相信以前没有在 cin 上这样做过。

更新:

在 Windows 上,它在第 26 个字符后停止,可能是因为 Ctrl-Z 的缘故。我不太关心这个问题。它只需要在 Linux 上运行。

不过,在 Linux 上,它读取从 0 到 127 的所有字符。但它似乎并没有读取从 127 到 255 的扩展 ASCII 字符。有一个“解决方案”程序可以产生我们应该模仿的输出,并且该程序能够以某种方式读取所有 255 个字符。

问题:如何使用 cin 读取所有 255 个 ASCII 字符?

已解决

使用:

int characterInt;
unsigned char character;

while ( (characterInt = getchar()) != EOF )
{
// 'character' now stores values from 0 - 255
character = (unsigned char)(characterInt);
}

最佳答案

我猜你是在 windows 上。在 Windows 平台上,字符 26 是 ctrl-z,它在控制台中用于表示文件结尾,因此 iostream 认为您的文件在该字符处结束。

它只会在 cin 使用的文本模式下执行此操作,如果您以二进制模式打开 steam,它不会执行此操作。

关于读取超过 127 个 ASCII 值时 C++ cin 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com