lili200238 发表于 2016-10-13 16:57:07

错在哪???

/*
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,
则继续判断第二个字母。
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或 if
语句判断第二个字母。
*/

#include<stdio.h>

int main()
{
        char letter;
        printf("please input the first letter of oneday!\n");

        while((letter=getchar())!='Y')         //改为‘y’
        {
                switch(letter)
                {
                case 'S':printf("please input second letter\n");
                        if((letter=getchar())=='a')
                        {
                                printf("saturday\n");
                        }
                        else if((letter=getchar())=='u')
                        {
                                printf("sunday\n");
                        }
                        else
                        {
                                printf("data error!\n");
                        }
                        break;

                case 'F':printf("friday\n");
                        break;

                case 'M':printf("monday\n");
                        break;

                case 'T':printf("please input the second letter\n");
                        if((letter=getchar())=='u')
                        {
                                printf("tuesday\n");
                        }
                        else if((letter=getchar())=='h')
                        {
                                printf("thursday\n");
                        }
                        else
                        {
                                printf("data error\n");
                        }
                        break;

                case 'W':printf("wednesday\n");
                        break;

                default:printf("data error!\n");
                }
        }
}

orino 发表于 2016-10-13 16:57:08

#include<stdio.h>

int main()
{
      char letter;
      printf("please input the first letter of oneday!\n");

      while((letter=getchar())!='Y')         //改为‘y’
      {
            getchar();
                switch(letter)
                {
                case 'S':printf("please input second letter\n");
                        if((letter=getchar())=='a')
                        {
                              printf("saturday\n");
                        }
                        else if(letter=='u')
                        {
                              printf("sunday\n");
                        }
                        else
                        {
                              printf("data error!\n");
                        }
                        getchar();
                        break;

                case 'F':printf("friday\n");
                        break;

                case 'M':printf("monday\n");
                        break;

                case 'T':printf("please input the second letter\n");
                        if((letter=getchar())=='u')
                        {
                              printf("tuesday\n");
                        }
                        else if(letter=='h')
                        {
                              printf("thursday\n");
                        }
                        else
                        {
                              printf("data error\n");
                        }
                        getchar();
                        break;

                case 'W':printf("wednesday\n");
                        break;

                default:printf("data error!\n");
                }
      }
}




满意请评分打赏{:5_92:}

orino 发表于 2016-10-13 18:36:03

本帖最后由 orino 于 2016-10-17 08:22 编辑

有不少问题,第一,在使用l=getchar()之后,按回车键是会产生换行回车两个字符,回车输入字符后还会剩下一个换行字符留在输入区,这时马上用l=getchar()是会捕获这个换行字符而不是你想输入的字符,所以如果一定要每次输入后按回车键,那么就请在每次使用后单独用一个getchar()吞掉这个多余的字符;第二点,照你的第二个字母判断方法来看,你的else if里的字符在第一次输入时都不会被匹配,所以推荐在每个case里只用一个l=letchar(),然后对l判断.

huabcdf 发表于 2016-10-13 18:59:22

本帖最后由 huabcdf 于 2016-10-13 19:01 编辑

二个问题,一是没过滤掉加车,二是判断时不能重复从缓冲区提取字符。
更改如下,若有不对,请指正。
#include<stdio.h>

int main()
{
      char letter;
      printf("please input the first letter of oneday!\n");

      while((letter=getchar())!='Y')         //改为‘y’
      {
                fflush(stdin);//清空缓冲区
                switch(letter)
                {
                case 'S':printf("please input second letter\n");
                         letter=getchar();//只能从缓冲区提取一次字符
                        //fflush(stdin);//清空缓冲区
                        if(letter=='a')
                        {
                              printf("saturday\n");
                        }
                        else if(letter=='u')
                        {
                              printf("sunday\n");
                        }
                        else
                        {
                              printf("data error!\n");
                        }
                        break;

                case 'F':printf("friday\n");
                        break;

                case 'M':printf("monday\n");
                        break;

                case 'T':printf("please input the second letter\n");
                        letter=getchar();
                        //fflush(stdin);//清空缓冲区
                        if(letter=='u')
                        {
                              printf("tuesday\n");
                        }
                        else if(letter=='h')
                        {
                              printf("thursday\n");
                        }
                        else
                        {
                              printf("data error\n");
                        }
                        break;

                case 'W':printf("wednesday\n");
                        break;
                case '\n':break;//输入第二个字符时若不清空缓冲区会把回车读到下轮的letter.

                default:printf("data error!\n");
                }
      }
}

lili200238 发表于 2016-10-15 15:01:13

orino 发表于 2016-10-13 16:57
满意请评分打赏

收到鱼币了吗?

lili200238 发表于 2016-10-15 15:03:20

huabcdf 发表于 2016-10-13 18:59
二个问题,一是没过滤掉加车,二是判断时不能重复从缓冲区提取字符。
更改如下,若有不对,请指正。
#inc ...

谢谢!!!

网上说fflush(stdin);此函数仅适用于部分编译器(如VC6)

orino 发表于 2016-10-15 16:33:09

本帖最后由 orino 于 2016-10-17 08:21 编辑

嗯,原来说的顺序反了,准确的是先回车(13,\r)再换行(10,\n)已经修正了
页: [1]
查看完整版本: 错在哪???