c语言 - 使用 int 代替字符



我有一本《C编程语言》一书,在第一章中,它展示了一个简短的代码示例,该代码将字符从stdin复制到stdout。这是代码:

main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

然后作者说,他使用int而不是char,因为char不够大,无法容纳EOF。 但是当我尝试使用 char 时,它以相同的方式工作,即使使用 ctrl+z。 Stack说这是一个重复的,所以我简短地问:

为什么使用"char"是错误的?

如果你会写例如

char c;
c = getchar();
while (c != EOF) {
//...

在条件c != EOF中,对象c的值提升为类型int并比较两个整数。

将变量c声明为具有类型char的问题在于,char类型可以表现为类型signed charunsigned char(取决于编译器选项)。如果类型char的行为与类型unsigned char,则表达式c != EOF将始终计算为逻辑true

注意根据C标准EOF

定义如下

EOF 扩展到整数常量表达式,类型为 int 和一个负值,由多个函数返回以指示文件结束,即不再有来自流的输入;

所以在这次任务之后

c = getchar();

c声明为具有类型char并且类型char的行为为类型unsigned char时,c的值在整数升级后将为正值,因此不会等于负值。

要模拟这种情况,只需将变量c声明为具有类型unsigned char

unsigned char c;

相关内容

  • 没有找到相关文章

最新更新