姬世鹏 发表于 2019-12-7 10:30:14

关于有符号整形变量的自减问题

#include <stdio.h>//例一
#define height 7

int main()
{
        int gap,i,n,k=0,ch;
       
        printf("请输入中间空格数:\n");
        scanf("%d",&gap);

        printf("输出结果如下:\n");
        for(i = 0;i < height; i++)
        {
                        int temp = gap;        //这里又定义了一个整形变量,此时例一的情况正常
                        while(temp--)
                        {                               
                                putchar(' ');
                        }       
        }
       
        return 0;
}


#include <stdio.h>//例二

#define height 7
int main()
{
        int gap,i,n,k=0,ch;
       
        printf("请输入中间空格数:\n");
        scanf("%d",&gap);

        printf("输出结果如下:\n");
        for(i = 0;i < height; i++)
        {
                               
                        while(gap--)//这次没有定义一个整形变量,而是直接用gap进行自减,但结果却显示无限循环,为什么?明明gap与temp的类型一样,存放的数据也一样。
                        {                               
                                putchar(' ');
                        }       
        }
       
        return 0;
}

sanguine_boy 发表于 2019-12-7 10:30:15

int temp = gap;   //这里每次跳出while循环后都会重新把gap的值赋给temp,而如果没有这句代码直接使用while(gap--)的话,当i=1,即循环完i=0的时候,gap=0,然后gap自减得到-1,接下来就永远跳不出while循环了,所以是个死循环
               

姬世鹏 发表于 2019-12-7 22:40:07

sanguine_boy 发表于 2019-12-7 15:44
int temp = gap;   //这里每次跳出while循环后都会重新把gap的值赋给temp,而如果没有这句代码直接使用whil ...

谢谢,我居然没想到{:5_106:}
页: [1]
查看完整版本: 关于有符号整形变量的自减问题