露珠珠珠 2024-04-24 14:19 采纳率: 25%
浏览 4
已结题

打字练习纠错,为什么结果那里跳过了一次输入

img

img


这个打字练习单独作为一个代码运行是正确的,但是作为调用函数之后,运行结果那里为什么跳过了一次输入

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-24 14:19
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,存在一个缩进错误和一个语法错误,这可能是导致问题的原因。让我们逐步修复这些问题。

    首先,修复缩进错误。在for循环内部,应该将所有语句正确地缩进。下面是修复后的代码片段:

    for (i = 1; i <= NUM; i++) {
        printf("原值为:");
        ch1 = rand() % (MAX - MIN + 1) + MIN;
        putchar(ch1);
        printf("请输入:");
        ch2 = getchar();
        if (ch1 == ch2)
            right++;
        else
            fault++;
        fflush(stdin);
        putchar('\n');
    }
    

    接下来,解决语法错误。在输出错误次数时,您忘记了一个变量名。这里是修正后的部分:

    printf("总: %d, 正确:%d, 错误:%d, 用时:%f秒\n", NUM, right, fault, duration);
    

    最终修复后的完整代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int print_writing() {
        int i, NUM = 5, right = 0, fault = 0;
        char MIN = '!', MAX = '~', ch1, ch2;
        clock_t start, finish;
        double duration;
    
        printf("打字练习游戏!\n");
        printf("请输入相同的字符!\n");
        system("PAUSE");
    
        srand(time(0));
        start = clock();
    
        for (i = 1; i <= NUM; i++) {
            printf("原值为:");
            ch1 = rand() % (MAX - MIN + 1) + MIN;
            putchar(ch1);
            printf("请输入:");
            ch2 = getchar();
            if (ch1 == ch2)
                right++;
            else
                fault++;
            fflush(stdin);
            putchar('\n');
        }
    
        finish = clock();
        duration = (double)(finish - start) / CLOCKS_PER_SEC;
    
        printf("总: %d, 正确:%d, 错误:%d, 用时:%f秒\n", NUM, right, fault, duration);
    
        return 0;
    }
    
    int main() {
        print_writing();
        return 0;
    }
    

    现在,当您作为主程序运行这段代码时,它应该能正常工作,不会跳过任何输入。确保包含头文件(#include <stdio.h>#include <stdlib.h>#include <time.h>)并使用适当的编译器(例如GCC或Clang)编译和执行此代码。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月1日
  • 创建了问题 4月24日