c - 为什么输出的结果不对?
本文介绍了c - 为什么输出的结果不对?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
code Block 编译器
signed char a
unsigned char b
两个变量从0~127相对应的输出,得到效果为:
1 = 1
2 = 2
3 = 3
……
在a = 127时,将a赋值为 -128,a与b继续对应输出直到a = -1, b = 255,
以下是我写的代码:
#include<stdio.h>
int main( void )
{
signed char a;
unsigned char b = 0;
for( a = 0; a <= 127 && b <= 127; a++ )
{
b++;
printf( "%d = %u\n", a, b );
if( a == 127 )
{
for( a = -128; a <= -1; a++ )
{
b++;
printf( "%d = %u\n", a, b );
}//end for
}//end if
}//end for
return 0;
}
输出的结果:
为什么输出不是从1开始?
为什么会输出了1 = 1之前的内容?
麻烦哪位给讲解一下,到底是为什么。
解决方案
你的循环跑的不对啊:
外面的循环a从0开始,b从0开始,但你main函数里面第5行b++,让你第6行的打印b会比a大1
a跑到127,此时b跑到128,进入内循环
内循环当a跑到-2的时候,b等于255
然后a = -1,b由于是unsigned char,溢出了,会从0开始
此时内循环结束,a = -1,b = 0
于是你的外循环又开始跑,结果这次你错上加错,导致结果反而像题中要求出正确结果了
总之你这个程序问题多多,我给你个简单的版本:
#include <stdio.h>
int main()
{
signed char a;
unsigned char b;
for (a = 1, b = 1; a <= 127 && b <= 127; a++, b++) {
printf("%d = %u\n", a, b);
}
for (a = -128, b = 128; a <= -1 && b <= 255; a++, b++) {
printf("%d = %u\n", a, b);
}
return 0;
}
这篇关于c - 为什么输出的结果不对?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文