我创建了一个包含256个字符的文本文件,文本文件的第一个字符是ASCII值0,文本值的最后一个字符是ASCII值255。中间的字符从0到255平均递增。所以第27个字符是ASCII值27。第148个字符应该是ASCII值148。
我的目标是读取这个文本文件的每个字符。
我尝试使用cin读取它。我尝试过cin.get()和cin.read(),它们都应该读取未格式化的输入。但是在读取第26个字符时,两者都失败了。我认为当我使用unsigned char时,cin说它正在读取255,这显然是不正确的。当我使用普通的signed char时,cin说它正在读取-1。它应该读取ASCII 26的字符等价物。也许cin认为它已经到达了EOF?但我之前在StackOverflow上阅读过EOF并不是一个实际可写的字符。所以我迷失了,为什么cin会在表示整数-1或整数255的字符值上出错。请问有人能告诉我我做错了什么,为什么以及最好的解决方案是什么,以及为什么吗?
没有太多具体的代码可以粘贴。我尝试了几种不起作用的组合,都涉及到cin.get()或cin.read(),其中包括char或unsigned char,并在它们之间调用char和int的强制转换。我无法读取超过第26个字符,除了这个:
有趣的是,尽管这不会在第26个字符停止我的while循环,但它也不会继续执行。似乎无论是cin.get()还是cin.read(),只要它检测到不喜欢的东西,它就拒绝前进到下一个字符。我也知道类似于cin.ignore()的东西存在,但我的输入是不可预测的;也就是说,我的文本文件中的这256个字符只是一个测试用例,真正的输入是相当随机的。虽然这是一个更大的作业任务的一部分,但这个具体的问题与该任务无关;我只是卡在了这个过程的一部分上。
注意:我正在从标准输入流中读取,而不是特定的文本文件。看起来仍然没有直接的解决方案。我简直不敢相信这在cin上还没有被做过。
更新:
在Windows上,由于Ctrl-Z的原因,它在第26个字符后停止。我对这个问题并不是那么在意。它只需要在Linux上运行即可。
在Linux上,它可以读取0-127的所有字符。但它似乎没有读取从127到255的扩展ASCII字符。有一个“解决方案”程序,它生成了我们应该模仿的输出,并且该程序能够以某种方式读取所有255个字符。
问题:如何使用cin读取所有255个ASCII字符?
已解决
使用:
我的目标是读取这个文本文件的每个字符。
我尝试使用cin读取它。我尝试过cin.get()和cin.read(),它们都应该读取未格式化的输入。但是在读取第26个字符时,两者都失败了。我认为当我使用unsigned char时,cin说它正在读取255,这显然是不正确的。当我使用普通的signed char时,cin说它正在读取-1。它应该读取ASCII 26的字符等价物。也许cin认为它已经到达了EOF?但我之前在StackOverflow上阅读过EOF并不是一个实际可写的字符。所以我迷失了,为什么cin会在表示整数-1或整数255的字符值上出错。请问有人能告诉我我做错了什么,为什么以及最好的解决方案是什么,以及为什么吗?
没有太多具体的代码可以粘贴。我尝试了几种不起作用的组合,都涉及到cin.get()或cin.read(),其中包括char或unsigned char,并在它们之间调用char和int的强制转换。我无法读取超过第26个字符,除了这个:
unsigned char character;
while ( (character = (unsigned char)cin.get()) != EOF) { ... }
有趣的是,尽管这不会在第26个字符停止我的while循环,但它也不会继续执行。似乎无论是cin.get()还是cin.read(),只要它检测到不喜欢的东西,它就拒绝前进到下一个字符。我也知道类似于cin.ignore()的东西存在,但我的输入是不可预测的;也就是说,我的文本文件中的这256个字符只是一个测试用例,真正的输入是相当随机的。虽然这是一个更大的作业任务的一部分,但这个具体的问题与该任务无关;我只是卡在了这个过程的一部分上。
注意:我正在从标准输入流中读取,而不是特定的文本文件。看起来仍然没有直接的解决方案。我简直不敢相信这在cin上还没有被做过。
更新:
在Windows上,由于Ctrl-Z的原因,它在第26个字符后停止。我对这个问题并不是那么在意。它只需要在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);
}
read()
和get()
会失败? - Jasonget()
。 正确的用法是:`int character;while ( (character = cin.get()) != EOF) { ... }` - Robᵩgetchar()
。 - Jason