我创建了一个包含 256 个字符的文本文件,文本文件的第一个字符是 ASCII 值 0,文本值的最后一个字符是 ASCII 值 255。介于 0 到 255 之间的字符均匀递增。所以字符 #27 是 ASCII 值 27。字符 #148 应该是 ASCII 值 148。
我的目标是阅读这个文本文件的每个字符。
我试过用cin
. 我试过cin.get()
and cin.read()
,两者都应该读取未格式化的输入。但是在读取第 26 个字符时都失败了。我想当我使用 an 时unsigned char
,cin
说它正在阅读 read in 255
,这根本不是真的。而当我用正常的签名时char
,cin
说是在读-1
。它应该读取与 ASCII 等效的任何字符26
。也许cin
认为它被击中了EOF
?但我之前读过不同的 StackOverflow 帖子,这EOF
不是一个可以写的实际字符。所以我不知道为什么cin
咳嗽代表整数-1
或整数的字符值255
. 有人可以告诉我我做错了什么,为什么,最好的解决方案是什么,为什么?
没有太多要粘贴的具体代码。我已经尝试了一些不同的非工作组合,所有这些组合都涉及cin.get()
or 或cin.read()
with any char
or并在两者之间unsigned char
调用强制转换。我没有运气能够阅读超过第 26 个字符,除了这个:char
int
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);
}