scanf扫描C中的奇怪问号

时间:2018-04-19 03:28:35

标签: c scanf

我为学校项目编写了这段代码,我遇到了以下问题。 当我第一次选择1时,我的程序运行正常,但是当我第二次选择w或r时,出现问题。 2 ifs中没有一个正在运行。我打印usr_ans2来查看scanf和usr_ans2变量的结果是一个奇怪的问号,而不是我输入的w或r字符。我也尝试了scanf(" %c", usr_ans2)。问号没有出现,但if命令仍未运行。

int main(){

    int usr_ans1;
    char usr_ans2;

    while(1){

        printf("\nSelect action: (1-3)\n");
        scanf("%d", &usr_ans1);

        if(usr_ans1 == 1){
            printf("Select to write or read from a file the text: (w/r) ");
            usr_ans2 = scanf("%c", &usr_ans2);

            if(usr_ans2 == 'w')
                printf("You selected to write");

            else if(usr_ans2 == 'r')
                printf("You selected to read");

        }

        else if(usr_ans1 == 2){
            printf("Example1");
        }

        else if(usr_ans1 == 3){
            printf("Example2");
        }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

scanf()中的

usr_ans2 = scanf("%c", &usr_ans2);将返回1(成功转换的说明符的数量)或EOF(当文件结束或错误发生时,某些负值如-1)。 if(usr_ans2 == 'w')永远不会成真。

尝试

// usr_ans2 = scanf("%c", &usr_ans2);
scanf(" %c", &usr_ans2);  // add the space too to skip leading white-space