输入数据后,开关始终默认

时间:2017-12-01 11:58:48

标签: c while-loop switch-statement

运行第一个代码时可能没有问题 但是,在我输入评论数据后,它将始终默认

char answer;

do{
    printf("Do you want to add new comment?Y/N: ");
    scanf("%c",&answer);
    fflush(stdin);

    switch(tolower(answer)) 
    {
        case 'y':
            comment();
            break;

        case 'n':
            main();
            break;

        default:
            printf("Wrong choice !\n\n");
            break;
    }
}while(tolower(answer)!=='y'||'n'); 

有注释()的代码,我想这里的问题。

FILE*fp=fopen("comment.txt","a+");

if(fp == NULL)
{
    printf("FIle not Found");
    exit(1);
}
else
{
    printf("Please enter your name: ");
    gets(c.name);
    printf("Pleas enter the date: ");
    gets(c.date);
    printf("Please enter the movie name: ");
    gets(c.movie);
    printf("Please enter your comment in 100 words:\n");
    printf("Please press [Tab]and[Enter] to submit your comment\n");
    scanf("%[^\t]",c.comment);

    fprintf(fp,"%s    %s\n%s\n%s\n\n",c.name,c.date,c.movie,c.comment);
}
fclose(fp);

有人可以帮助我吗?Thx !!

4 个答案:

答案 0 :(得分:2)

尝试使用strlwr()代替tolower()

答案 1 :(得分:2)

编译器为while条件提供了没有错误的信息吗?

也许你想写:

[...]GroupMenus?$filter=GroupId eq 2&$expand=Menu&$select=Menu

答案 2 :(得分:0)

do{}while内,您正在读取输入缓冲区,其中包含您输入的字符和输入键。你需要清楚这一点。试试scanf("%c%*c",&answer);。它将从缓冲区读取额外的字符

答案 3 :(得分:0)

您的代码中存在一些问题。

scanf("%c",&answer);

第一次输入字符时,如果字符yn,则在下一次迭代中,此scanf()将读取迷路\n(换行符) )输入缓冲区中的字符。要解决此问题,请在%之前添加空格字符,如下所示:

scanf(" %c",&answer);

另一个问题是这句话:

while(tolower(answer)!=='y'||'n'); 
                     ^^    ^ 

编译器必须在此声明中同时给出错误和警告。

将其更改为:

while(tolower(answer)=='y'||tolower(answer)=='n');

使用此循环运行直到用户输入yn,对于任何其他字符,循环将退出。

如果您不希望循环退出yn以外的任何输入字符,只需打印消息Wrong choice !消息即可:

}while(tolower(answer)!='y'||tolower(answer)!='n');