You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言算术答题程序while循环重复输出相同算式问题求助

问题原因分析
  • 核心错误是srand() 函数的调用位置不符合预期:srand() 作用是初始化随机数生成器的种子,同一程序运行周期内仅需调用1次即可。你将固定种子的srand(4675)写在了循环内部,每次答题循环都会用同一个值重置随机种子,导致每次生成的随机数序列完全一致,自然每次弹出的题目都相同。
  • 代码还存在两个潜在问题:
    • 减法分支未处理n1 == n2的场景,当两个数相等时不会输出题目,程序会直接卡住等待输入
    • 除法分支直接用整数截断运算,未保证被除数能被除数整除,可能出现和用户常规计算结果冲突的情况
修复方案
  1. 把srand()调用移到do-while循环外部,整个程序仅执行一次随机种子初始化
  2. 建议使用系统时间作为随机种子,保证每次启动程序生成的题目都不一样,需要额外引入<time.h>头文件
  3. 可选补充减法相等判断、除法整除校验逻辑
修正后代码示例
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main (void){
    int temp,i=0,n2,n1,c,N,N1,N2,num1,num2;
    // 随机种子仅初始化1次
    srand((unsigned int)time(NULL));
    do {
        num1=rand()%20+1;
        num2=rand()%30+1;
        N1=rand()%30+1;
        N2=rand()%40+1;
        n1=rand()%100+100;
        n2=rand()%120+100;
        c=rand()%4;
        i++;
        switch(c) {
            case 0:
                printf("%d+%d=",n1,n2);
                scanf("%d",&N);
                if (N==n1+n2)
                    printf("Right\n");
                else 
                    printf("Error\n");
                break;
            case 1:
                if (n1>=n2)
                    printf("%d-%d=",n1,n2);
                else
                    printf("%d-%d=",n2,n1);
                scanf ("%d",&N);
                if (N==abs(n1-n2))
                    printf("Right\n");
                else 
                    printf("Error\n");
                break;
            case 2:
                printf("%d*%d=",N1,N2);
                scanf("%d",&N);
                if (N==N1*N2)
                    printf("Right\n");
                else 
                    printf("Error\n");
                break;
            case 3:
                // 可选优化:保证整除避免歧义
                num1 = num1 % num2 == 0 ? num1 : num2 * (rand()%10 +1);
                printf("%d/%d=",num1,num2);
                scanf("%d",&N);
                if (N==num1/num2)
                    printf("Right\n");
                else 
                    printf("Error\n");
                break;
        }
    } while (i<10);
    return 0;
}

内容的提问来源于stack exchange,提问作者Ted

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:03