为什么函数不能再次输入了

我想让question函数里返回一个字符,然后再输入一个字符,和返回的字符比较,但运行后我只能输入数字n,然后函数就结束了,不能输入字符了。

#include
void question(int n){
    switch(n){
        case 1:printf("1+1=?\n");printf("A.1  B.2  C.3\n");/*return 'B'*/;break;
        case 2:printf("1+2=?\n");printf("A.1  B.2  C.3\n");/*return 'C'*/;break;
        case 3:printf("1+3=?\n");printf("A.1  B.2  C.4\n");/*return 'C'*/;break;
        case 4:printf("1+4=?\n");printf("A.1  B.5  C.3\n");/*return 'B'*/;break;
        case 5:printf("1+5=?\n");printf("A.6  B.2  C.3\n");/*return 'A'*/;break;
        case 6:printf("1+6=?\n");printf("A.1  B.7  C.3\n");/*return 'B'*/;break;
        default:break;
    }
}
char answer(int n){
    if(n==1)
    return 'C';
}
int main(){
    int n;
    char c,a;
    scanf("%d",&n);
     question(n);
     
    scanf("%c",&c);//为什么这行无法进行输入
    a=answer(n);
    if(a==c)
    printf("ok");
    else
    printf("sad");
    return 0;
}

在你的代码中,无法输入字符的问题可能是因为上一个输入留下了回车符的缘故。当你使用 scanf 读取数字后,回车符会被留在输入缓冲区中,然后当你使用 scanf 读取字符时,它会读取这个回车符而不是你实际想要输入的字符。你可以通过在第二个 scanf 语句前添加一个 getchar() 语句来清除输入缓冲区中的回车符。这样,你就可以正常输入字符了。

另外,你的 answer 函数中只为输入值为 1 的情况提供了返回值,其他情况下没有返回值。你需要为每个问题提供正确的答案并在函数中返回它们,这样你才能在主函数中检查用户的答案是否正确。

下面是一个修改后的代码,你可以参考一下:


#include <stdio.h>

void question(int n) {
    switch (n) {
        case 1:
            printf("1+1=?\n");
            printf("A.1  B.2  C.3\n");
            break;
        case 2:
            printf("1+2=?\n");
            printf("A.1  B.2  C.3\n");
            break;
        case 3:
            printf("1+3=?\n");
            printf("A.1  B.2  C.4\n");
            break;
        case 4:
            printf("1+4=?\n");
            printf("A.1  B.5  C.3\n");
            break;
        case 5:
            printf("1+5=?\n");
            printf("A.6  B.2  C.3\n");
            break;
        case 6:
            printf("1+6=?\n");
            printf("A.1  B.7  C.3\n");
            break;
        default:
            break;
    }
}

char answer(int n) {
    switch (n) {
        case 1:
            return 'B';
        case 2:
            return 'C';
        case 3:
            return 'C';
        case 4:
            return 'B';
        case 5:
            return 'A';
        case 6:
            return 'B';
        default:
            return ' ';
    }
}

int main() {
    int n;
    char c, a;
    scanf("%d", &n);
    question(n);
    getchar();  // 清除输入缓冲区中的回车符
    scanf("%c", &c);
    a = answer(n);
    if (a == c) {
        printf("ok\n");
    } else {
        printf("sad\n");
    }
    return 0;
}

第23行: scanf("%c",&c); 修改为:scanf(" %c",&c);修改如下,供参考:

#include<stdio.h>
void question(int n){
    switch(n){
        case 1:printf("1+1=?\n");printf("A.1  B.2  C.3\n");/*return 'B'*/;break;
        case 2:printf("1+2=?\n");printf("A.1  B.2  C.3\n");/*return 'C'*/;break;
        case 3:printf("1+3=?\n");printf("A.1  B.2  C.4\n");/*return 'C'*/;break;
        case 4:printf("1+4=?\n");printf("A.1  B.5  C.3\n");/*return 'B'*/;break;
        case 5:printf("1+5=?\n");printf("A.6  B.2  C.3\n");/*return 'A'*/;break;
        case 6:printf("1+6=?\n");printf("A.1  B.7  C.3\n");/*return 'B'*/;break;
        default:break;
    }
}
char answer(int n){
    if(n==1)
        return 'B';
    if(n==2)
        return 'C';
    if(n==3)
        return 'C';
    if(n==4)
        return 'B';
    if(n==5)
        return 'A';
    if(n==6)
        return 'B';
}
int main(){
    int n;
    char c,a;
    scanf("%d",&n);
     question(n);

    scanf(" %c",&c);//scanf("%c",&c); 修改 为什么这行无法进行输入
    a=answer(n);
    if(a==c)
        printf("ok");
    else
        printf("sad");
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^