街角提子 发表于 2020-9-16 17:53:14

关于C语言getchar语句

本帖最后由 街角提子 于 2020-9-16 17:54 编辑

在做C语言S1E13课后作业的时候发现把getchar语句和while放在不同位置运行出来的结果不同。

类似情况如下:
1.当getchar()放在while外:
#include <stdio.h>

int main()
{
        int i=1,a= getchar();
       
        while(i)
        {
          if (a >='4')
          {putchar(a);
          }
          else
          {i=0;
          }
       }
       
       
        return 0;
}
结果:输入4回车后一直打印4无结束(“444444444444444444444444444……”)


2.当getchar放在while里:
#include <stdio.h>

int main()
{
        int i=1,a;
       
        while(i)
        {
          if ((a= getchar()) >='4')
          {putchar(a);
          }
          else
          {i=0;
          }
       }
       
       
        return 0;
}
#include <stdio.h>

int main()
{
        int i=1,a;
       
        while(i)
        {
                a= getchar();
          if (a >='4')
          {putchar(a);
          }
          else
          {i=0;
          }
       }
       
       
        return 0;
}

结果:输入4回车后正常打印4;



请问有人知道为什么会出现这种差异吗?

baige 发表于 2020-9-16 17:57:21

输入4换行时,缓冲区有'4'和'\n',放在循环外a先获取'4',a的值一直为'4'所以一直满足if条件
放在while里a先获取'4',在获取'\n',当a='\n',满足else,i = 0; 退出循环
页: [1]
查看完整版本: 关于C语言getchar语句