戌砚 发表于 2021-11-4 09:48:52

为什么while循环这里要将getchar()赋值给ch,再进行判断?

为什么while循环这里要将getchar()赋值给ch,再进行判断?
#include <stdio.h>

int main()
{
      int ch, count = 0;

      printf("请输入一行英文句子:");

      while ((ch = getchar()) != '\n')
      {
                if (ch >= 'A' && ch <= 'Z')
                {
                        count = count + 1;
                }
      }

      printf("你总共输入了%d个大写字母!\n", count);

      return 0;
}
直接用getchar()!='\n'却不行?
#include <stdio.h>

int main()
{
      int ch, count = 0;

      printf("请输入一行英文句子:");

      while ( getchar() != '\n')
      {
                ch=getchar();
                if (ch >= 'A' && ch <= 'Z')
                {
                        count = count + 1;
                }
      }

      printf("你总共输入了%d个大写字母!\n", count);

      return 0;
}

jhq999 发表于 2021-11-4 10:16:56

输入1,2,3,4,5,6 getchar()函数运行一次取一个。下面的会ch会隔一个取个值’2‘、’4‘、’6‘

jackz007 发表于 2021-11-4 10:25:43

本帖最后由 jackz007 于 2021-11-4 12:14 编辑

      因为每次执行 getchar() 都会从键盘读取一个字符,代码经你改过以后,每次循环都会从键盘读取 2 个字符,第 1 个专门用于判断是否是 '\n' ,第 2 个才会用于判断是否是大写英文字母。
      如果一定要改,可以这样改:
include <stdio.h>

int main(void)
{
      int ch , count = 0                                 ;
      printf("请输入一行英文句子:")                     ;
      while (1) {                                              // 无限循环
                ch = getchar() ;
                if(ch != '\n') {
                        if (ch >= 'A' && ch <= 'Z') count ++ ;
                } else {
                        break                              ; // 跳出循环   
                }
      }
      printf("你总共输入了%d个大写字母!\n" , count)       ;
      return 0                                             ;
}

先学他一个月 发表于 2021-11-4 22:14:45

学习到了
页: [1]
查看完整版本: 为什么while循环这里要将getchar()赋值给ch,再进行判断?