心鲜旅人 发表于 2021-7-14 16:44:10

c语言中关于for语句的一些禁忌

我发现for语句与while dowhile他们之间确实不是一个简单一个不简单的区别{:10_250:},今天做作业时,做了一个统计一句话中元音字母个数的程序
我是这么写的
#include <stdio.h>

int main()
{
        int a = 0,e = 0,i = 0,o = 0,u = 0,ch,sum;
       
        printf("请输入一个英文句子:");
       
        for (ch = getchar();ch != '\n';)
        {       
                switch(ch)
                {
                        case 'A':a++;break;
                        case 'a':a++;break;
                        case 'E':e++;break;
                        case 'e':e++;break;
                        case 'I':i++;break;
                        case 'i':i++;break;
                        case 'O':o++;break;
                        case 'o':o++;break;
                        case 'U':u++;break;
                        case 'u':u++;break;
                }       
        }
       
        sum = a + e + i + o + u;
       
        printf("您输入的句子中,包含元音字母%d个\n\
其中:a(%d),e(%d),i(%d),o(%d),u(%d)\n",sum,a,e,i,o,u);
       
        return 0;
}
小甲鱼是这么写的
#include <stdio.h>

int main()
{
      char ch;
      int a, e, i, o, u;

      a = 0;
      e = 0;
      i = 0;
      o = 0;
      u = 0;

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

      while ((ch = getchar()) != '\n')
      {
                switch (ch)
                {
                        case 'a':
                        case 'A': a++;
                                  break;
                        case 'e':
                        case 'E': e++;
                                  break;
                        case 'i':
                        case 'I': i++;
                                  break;
                        case 'o':
                        case 'O': o++;
                                  break;
                        case 'u':
                        case 'U': u++;
                                  break;
                }
      }

      printf("您输入的句子中,包含元音字母%d个!\n", a + e + i + o + u);
      printf("其中:a(%d),e(%d),i(%d),o(%d),u(%d)\n", a, e, i, o, u);

      return 0;
}
我的程序在编译后,输入完句子后按下回车就不再反应了,而只需要把for那句改成while就没问题了,这是为什么呢?求大佬解答,也希望大佬可以分享一下自己在敲代码时,关于for与while有什么要注意的呢?

人造人 发表于 2021-7-14 16:51:06

#include <stdio.h>

int main()
{
    int a = 0,e = 0,i = 0,o = 0,u = 0,ch,sum;

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

    //for (ch = getchar();ch != '\n';)
    for (ch = getchar();ch != '\n';ch = getchar())
    {      
      switch(ch)
      {
            case 'A':a++;break;
            case 'a':a++;break;
            case 'E':e++;break;
            case 'e':e++;break;
            case 'I':i++;break;
            case 'i':i++;break;
            case 'O':o++;break;
            case 'o':o++;break;
            case 'U':u++;break;
            case 'u':u++;break;
      }      
    }

    sum = a + e + i + o + u;

    printf("您输入的句子中,包含元音字母%d个\n\
            其中:a(%d),e(%d),i(%d),o(%d),u(%d)\n",sum,a,e,i,o,u);
    return 0;
}

qiuyouzhi 发表于 2021-7-14 17:19:42

把那个 for 循环改成这样:
for (;ch != '\n';ch = getchar())

心鲜旅人 发表于 2021-7-14 17:20:58

人造人 发表于 2021-7-14 16:51


谢谢{:10_254:},不过请问这是为什么呢,为什么循环调整表达式也要写ch = getchar()呢?

万千只cnm 发表于 2021-7-14 19:03:02

for有三个空呀 中间那个是判断是否进行循环的。
while 只有一个空进行判断

万千只cnm 发表于 2021-7-14 19:04:24

for (ch = getchar();ch != '\n';)
你这样相当于 第一个空ch = getchar() 只执行了一次
最后一个空省略了
页: [1]
查看完整版本: c语言中关于for语句的一些禁忌