请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母.

1个回答

  • 给你一个改动最少的方案:

    #include

    main()

    {

    char letter;

    printf("please input the first letter of somedayn");

    while((letter=getchar())!='y')

    {

    fflush(stdin);//这儿加一个强制键盘缓冲区清空处理,用以清空while判断里输入时最后所带的回车

    switch (letter)

    {

    case 's':printf("please input second letter:n");

    if ((letter=getchar())=='a')printf("saturdayn");

    else if (letter=='u')printf("sundayn"); //这儿直接判断letter,而不需要再判断letter=getchar()

    else printf("Data errorn");break;

    case 'f':printf("fridayn");break;

    case 'm':printf("mondayn");break;

    case 't':printf("please input second letter:n");

    if ((letter=getchar())=='u')printf("tuesdayn");

    else if (letter=='h')printf("thursdayn"); //这儿直接判断letter,而不需要再判断letter=getchar()

    else printf("Data errorn");break;

    case 'w':printf("wednesdayn");break;

    default:printf("errorn");

    }

    fflush(stdin);//这儿加一个强制键盘缓冲区清空处理,用以清空case语句里输入时最后所带的回车

    }

    }

    上面各位说的关于强制键盘缓冲区清空处理的都是对的,主要就是要注意输入数值时,回车的影响.

    但是上面各位的改造都过于复杂,主要是对于if/else语句的执行范围认识有误,

    对于

    if ((letter=getchar())=='a')printf("saturdayn");

    这个语句,即使当前输入的第2个字符不是'a',这里if判断里的letter=getchar()也会执行的,只是=='a'判断为假,所以if分支不执行.

    所以其实用户输入的第2个字符已经被接收了,所以当前letter中已经存放了用户输入的第2个字符.

    因此,后面的else if需要直接判断letter,而不需要再判断letter=getchar(),这样就多接收了一个字符了