Jas*_*son 6 c++ cin character-encoding
我创建了一个包含256个字符的文本文件,文本文件的第一个字符是ASCII值0,文本值的最后一个字符是ASCII值255.两者之间的字符均匀地从0到255递增.因此字符#27是ASCII值27.字符#148应该是ASCII值148.
我的目标是阅读此文本文件的每个字符.
我试过读这个cin.我试过cin.get()和cin.read(),这两者都应该读无格式输入.但是在阅读第26个角色时都失败了.我想当我用过时unsigned char,cin说它是读书255,这根本不是真的.当我使用普通签名时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) { ... }
Run Code Online (Sandbox Code Playgroud)
虽然有趣的是,虽然这并没有阻止我在第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);
}
Run Code Online (Sandbox Code Playgroud)
我猜你是在窗户上.在Windows平台上,字符26是ctrl-z,它在控制台中用于表示文件结尾,因此iostream认为您的文件以该字符结束.
它在cin正在使用的文本模式下执行此操作,如果以二进制模式打开蒸汽,则不会执行此操作.
std::cin读取文本流,而不是任意二进制数据。
至于为什么第 26 个字符很有趣,您可能正在使用 CP/M 衍生产品(例如 MS-DOS 或 MS-Windows)。在这些操作系统中,Control-Z 用作文本文件中的 EOF 字符。
#include <iostream>
#include <iomanip>
int main () {
int ch;
while( (ch=std::cin.get()) != std::istream::traits_type::eof() )
std::cout << ch << " ";
std::cout << "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2766 次 |
| 最近记录: |