C语言输入数值≥5时int类型运算结果输出字符是什么原因?
代码错误汇总
1. 输出格式符使用错误(你遇到的输出异常的直接原因)
你调用printf输出x时使用了%x格式符,该格式符的作用是将数值以小写十六进制形式输出,而非十进制整数:
- 当num≤4时,
num*2的结果为2、4、6、8,对应的十六进制表示和十进制完全相同,所以你误以为输出的是十进制整数 - 当num=5时,
num*2=10,十进制10对应的十六进制表示就是小写字母a,和x定义为int类型没有任何关系
如果要输出十进制整数,把printf("%x\n", x);修改为printf("%d\n", x);即可。
2. 数组越界访问问题
- 字符串
"helloworld"包含10个可见字符 + 1个末尾隐含的结束符\0,共占用11字节空间,你定义的s数组长度仅为10,无法完整存储该字符串,初始化阶段就已经发生数组越界 f和s都是长度为10的数组,合法下标范围是0~9,代码中f[10]、s[10]的访问都超出了数组边界,属于未定义行为,可能读取到随机内存值、触发程序崩溃。
3. 逻辑判断语法错误
if条件中你使用了赋值运算符=,而非相等判断运算符==:
- 你写的
if(s[10] = f[10])实际执行的是将f[10]的值赋值给s[10],只要赋值后的值不为0,条件就会成立,完全不符合你要判断两个值相等的逻辑 - 若要判断相等,应改为
if(s[10] == f[10])(注意该判断本身仍存在数组越界问题需要先修复)
4. 其他语法/规范问题
- 代码中
int x;后面的说明文本没有加//注释前缀,会被编译器识别为非法语法,无法通过编译,需要修改为int x; // This right here is an integer still it returns a character - int类型的main函数末尾缺少
return 0;返回语句,不符合C语言规范。
内容的提问来源于stack exchange,提问作者Dutt2498
相关产品推荐
相关产品推荐

