为什么输出的结果不对?

  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;
}

输出的结果:

clipboard.png

clipboard.png

为什么输出不是从1开始?
为什么会输出了1 = 1之前的内容?

麻烦哪位给讲解一下,到底是为什么。

阅读 2k
1 个回答

你的循环跑的不对啊:

  1. 外面的循环a从0开始,b从0开始,但你main函数里面第5行b++,让你第6行的打印b会比a大1

  2. a跑到127,此时b跑到128,进入内循环

  3. 内循环当a跑到-2的时候,b等于255

  4. 然后a = -1,b由于是unsigned char,溢出了,会从0开始

  5. 此时内循环结束,a = -1,b = 0

  6. 于是你的外循环又开始跑,结果这次你错上加错,导致结果反而像题中要求出正确结果了

总之你这个程序问题多多,我给你个简单的版本:

#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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进