c - 为什么下面的 for 循环不能正常工作?

标签 c char

#include<stdio.h>

int main() 
{
    char ch;
    for(ch='0';ch<=127;ch++)
    printf("%c %d",ch,ch);
    return 0;
}

执行时如何变成无限循环。我想知道背后的确切原因?从 int 到 char 来回类型转换的原因是什么?

还有一个小问题

是否要求所有扩展名为.c 的文件都必须有main()??

最佳答案

在这里,您将 charint 进行比较

for(ch='0';ch<=127;ch++)

char 的 int 值可以在 0 到 255 或 -128 到 127 之间,具体取决于实现。

在您的例子中,char 是一个signed char,它可以保存-128 到+127 范围内的值。因此,在您的情况下,一旦该值达到 127,它就会溢出并且您得到负值并且循环将永远继续,因为它的值永远不会超过 127。一旦达到 127,在下一次迭代中该值将为 -128,并且循环继续。

你可以使用unsigned char ch;

关于c - 为什么下面的 for 循环不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32043524/

相关文章:

arrays - Delphi:Char 和 TCharArray 数组 "Incompatible Types"

c - 使用 makefile 编译时出现链接器错误

c++ - 从 vi "like running cpp program without exiting vi."运行各种 c 或 cpp 开发任务

c - 如何摆脱在处理 GLUT 中的键盘事件时按住某个键的等待时间?

c++ - 迭代 char* 错误没有从 char* 到 int 的转换

java - 在 Java 中将字符串拆分为几个不同的行

c - 排序链表(ADT优先级队列)

c - 在其他输入之后使用 fgets()

c - 在 C 中扫描两个字符以查找 switch case

c++ - 将 char[] 转换为 off_t