c - 为什么输出的结果不对?

查看:98
本文介绍了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之前的内容?

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

解决方案

你的循环跑的不对啊:

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

这篇关于c - 为什么输出的结果不对?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆