蝴蝶是我 2023-02-16 22:49 采纳率: 76.5%
浏览 36
已结题

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

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

#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 '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;
}

  • 写回答

3条回答 默认 最新

  • zmy1127 2023-02-17 13:14
    关注

    在你的代码中,无法输入字符的问题可能是因为上一个输入留下了回车符的缘故。当你使用 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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月16日

悬赏问题

  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。