0

嗨,我知道范围内的随机发生器已经存在问题,但我不明白。我是C初学者,我只知道java。在这个程序中,我试图在 C 中创建一个数学导师。该程序将随机生成从 1 到 10 的两个数字和一个运算符。它运行,但不显示下一行,并且一直显示不正确的答案。另外,为什么 VS2010 说 getch() 是未定义的?这是代码:

 int ans;
 int ans1;
 int num1 = rand() % 10 + 2;
 int num2 = rand() % 10;
 int operation = rand() % 4;

    printf("\tMATH TUTOR\n");
    if(operation == 1){
        printf("What is %d + %d ?", num1, operation, num2);
        scanf_s("%d",ans1);
        ans = num1 + num2;
        if(ans != ans1){
            printf("Incorrect! Try Again!");
            do{
                scanf_s("%d", &ans1);
            }while( ans != ans);
        }else{
            printf("Correct!");
        }
        }else if(operation == 2){
            printf("What is %d - %d ?", num1, operation, num2);
            scanf_s("%d",&ans1);
            ans = num1 - num2;
            if(ans != ans1){
                printf("Incorrect! Try Again!");
                do{
                    scanf_s("%d", &ans1);
                }while( ans != ans);
            }else{
                printf("Correct!");
                }
        }else if(operation == 3 ){
            printf("What is %d * %d ?", num1, operation, num2);
            scanf_s("%d",&ans1);
            ans = num1 * num2;
            if(ans != ans1){
                printf("Incorrect! Try Again!");
                do{
                    scanf_s("%d", &ans1);
                }while( ans != ans);
            }else{
                printf("Correct!");
            }
            }else if(operation == 4){
                printf("What is %d / %d ?", num1, operation, num2);
                scanf_s("%d",&ans1);
                ans = num1 / num2;
                if(ans != ans1){
                    printf("Incorrect! Try Again!");
                    do{
                        scanf_s("%d", &ans1);
                    }while( ans != ans);
                }else{
                    printf("Correct!");
                }
            }

    getch();
    return 0;
}
4

2 回答 2

1

添加到 John Sheridan's: getch()是许多 MS-DOS 编译器添加的 C 的非标准扩展。它通常定义在<conio.h>. 我不知道VS2010是否默认支持。

于 2013-06-30T15:08:22.903 回答
0

您的代码存在多个问题,可能会使其运行方式与您的预期不同。

您测试从 1 到 4 的操作值。从 rand() % 4 为操作分配它的值。这意味着操作将永远只有 0 到 3 的值。

您的 do while 循环都有相同的缺陷。他们测试 ans != ans 而你应该测试 ans != ans1。

解决这些问题,你会走得更远。

编辑给你一个更好的提示

if(operation == 1){
    printf("What is %d + %d ?", num1, num2);
    scanf_s("%d",ans1);
    ans = num1 + num2;
    if(ans != ans1){
        do{
            printf("Incorrect! Try Again!");
            scanf_s("%d", &ans1);
        }while( ans != ans1);
    }
    printf("Correct!");
}

编辑以显示 srand 的使用

int ans;
int ans1;
srand((unsigned int)time(NULL));  //I've included your (unsigned int) cast.
int num1 = rand() % 10 + 2;
int num2 = rand() % 10;
int operation = rand() % 4;
于 2013-06-30T14:59:41.007 回答