标题很容易理解。
char c = std::cin.peek(); // sets c equal to character in stream
我刚刚意识到原生类型 char 可能无法保存 EOF。
谢谢, 核磁共振
最佳答案
简短回答:否。使用 int 而不是 char。
稍微长一点的答案:不能。如果你能从一个函数中得到一个字符或值EOF,比如C的getchar和C++的peek,显然一个普通的 char 变量将不足以保存所有有效字符 和 值 EOF。
更长的答案:这取决于,但它永远不会像您希望的那样工作。
C 和 C++ 具有三种字符类型(“宽”类型除外):char、signed char 和unsigned char。普通 char 可以是有符号的或无符号的,这因编译器而异。
EOF 的值是一个负整数,通常为 -1,因此显然您不能将其存储在 unsigned char 或普通的 char 未签名。假设您的系统使用 8 位字符(几乎所有系统都使用),EOF 将转换为(十进制)255,您的程序将无法运行。
但是如果你的 char 类型是有符号的,或者如果你使用 signed char 类型,那么是的,你可以在其中存储 -1,所以是的,它可以按住 EOF。但是当您从文件中读取代码为 255 的字符时会发生什么?它将被解释为 -1,即 EOF(假设您的实现使用 -1)。因此,您的代码不仅会在文件末尾停止读取,还会在找到 255 个字符时立即停止读取。
关于C++ 原生类型 char 可以保存文件结尾字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851525/