其他一切都很好,但尝试去减法或除法部分(练习的一部分是不要问有否定答案的减法问题或除以 0 或答案小于 1 的除法问题)。起初它有效,然后尝试回答另一个问题。它给出了这个未包含在我的初始化函数中的复杂问题所以我尝试回答它,它仍然可以检测到正确答案。然后它给出这个 32 - 9 或 32/9(无法回答除法部分,因为它需要余数并且问题太复杂)。给出正确答案后,尝试回答另一个减法/除法问题,它会崩溃并给出此错误进程返回 -1073741819我的代码有什么问题?也提前谢谢! 顺便说一句,我在我的代码中应该限制除法和减法的部分添加了注释
/* Arithmetic Quiz Practice Program */
#include <stdio.h>
#include <stdlib.h>
int numbers[10];
int clear(void);
int initialize(void);
int additionquiz(void);
int subtractionquiz(void);
int multiplicationquiz(void);
int divisionquiz(void);
/* Main Menu */
int main()
{
while(1==1)
{
int choice;
initialize();
printf("Arithmetic Quiz 4/10/2012");
printf("\n1 - Addition Quiz\n2 - Subtraction Quiz\n3 - Multiplication Quiz\n4 - Division Quiz\n5 - Exit Program\n");
scanf("%d",&choice);
if(choice==1)
{
clear();
additionquiz();
}
else if(choice==2)
{
clear();
subtractionquiz();
}
else if(choice==3)
{
clear();
multiplicationquiz();
}
else if(choice==4)
{
clear();
divisionquiz();
}
else if(choice==5)
{
exit(EXIT_SUCCESS);
}
else
{
printf("\n%cPlease input a valid option\n",7);
main();
}
}
return 0;
}
/* Function for clearing the page */
int clear()
{
int i;
for(i=0;i<25;i++)
{
printf("\n");
}
return 0;
}
/* Function for initializing the Array */
int initialize()
{
numbers[0]=9;
numbers[1]=5;
numbers[2]=1;
numbers[3]=4;
numbers[4]=7;
numbers[5]=8;
numbers[6]=3;
numbers[7]=6;
numbers[8]=2;
numbers[9]=0;
return 0;
}
/* Function for the Addition Quiz */
int additionquiz()
{
/* Randomizing the question in addition quiz */
int a,b,diff,ans,again;
a=0;
diff=1;
b=a+diff;
if(a>9)
{
a=0;
diff++;
}
if(diff>9);
{
diff=0;
}
if(b>9);
{
b=0;
}
/* Main part of the addition quiz */
while(1==1)
{
printf("\n%d + %d = ",numbers[a],numbers[b]);
scanf("%d",&ans);
if(ans==numbers[a]+numbers[b])
{
printf("\nYour answer is CORRECT!!!\n");
a++;
}
else
{
printf("\nYour answer is WRONG!!!\n");
additionquiz();
}
/* The loop for addition quiz" */
while(1==1)
{
printf("\n1 - Answer another addition question\n2 - Go back to main menu\n3 - Exit program\n");
scanf("%d",&again);
if(again==1)
{
clear();
break;
}
else if(again==2)
{
clear();
main();
}
else if(again==3)
{
exit(EXIT_SUCCESS);
}
else
{
printf("%cPlease input a valid option.\n",7);
continue;
}
}
continue;
}
}
/* Function for the subtraction quiz */
int subtractionquiz()
{
/* Randomizing the question in subtraction quiz */
int a,b,diff,ans,again;
a=0;
diff=1;
if(a>9)
{
a=0;
diff++;
}
if(diff>9);
{
diff=0;
}
b=a+diff;
if(b>9);
{
b=0;
}
/* Main part of the subtraction quiz */
while(1==1)
{
/* Not allowing questions with negative answer */
while(numbers[a]<numbers[b])
{
a++;
}
printf("\n%d - %d = ",numbers[a],numbers[b]);
scanf("%d",&ans);
if(ans==numbers[a]-numbers[b])
{
printf("\nYour answer is CORRECT!!!\n");
a++;
}
else
{
printf("\nYour answer is WRONG!!!\n");
subtractionquiz();
}
/* Loop for the subtraction quiz */
while(1==1)
{
printf("\n1 - Answer another subtraction question\n2 - Go back to main menu\n3 - Exit program\n");
scanf("%d",&again);
if(again==1)
{
clear();
break;
}
else if(again==2)
{
clear();
main();
}
else if(again==3)
{
exit(EXIT_SUCCESS);
}
else
{
printf("%cPlease input a valid option.\n",7);
continue;
}
}
continue;
}
}
/* Function for multiplication quiz */
int multiplicationquiz()
{
/* Randomizing the multiplication quiz */
int a,b,diff,ans,again;
a=0;
diff=1;
b=a+diff;
if(a>9)
{
a=0;
diff++;
}
if(diff>9);
{
diff=0;
}
if(b>9);
{
b=0;
}
/* Main part of the multiplication quiz */
while(1==1)
{
printf("\n%d x %d = ",numbers[a],numbers[b]);
scanf("%d",&ans);
if(ans==numbers[a]*numbers[b])
{
printf("\nYour answer is CORRECT!!!\n");
a++;
}
else
{
printf("\nYour answer is WRONG!!!\n");
clear();
multiplicationquiz();
}
/* Loop for multiplication quiz */
while(1==1)
{
printf("\n1 - Answer another multiplication question\n2 - Go back to main menu\n3 - Exit program\n");
scanf("%d",&again);
if(again==1)
{
clear();
break;
}
else if(again==2)
{
clear();
main();
}
else if(again==3)
{
exit(EXIT_SUCCESS);
}
else
{
printf("%cPlease input a valid option.\n",7);
continue;
}
}
continue;
}
}
/* Function for division quiz */
int divisionquiz()
{
/* Randomizing the division quiz */
int a,b,diff,ans,again,remain;
a=0;
diff=1;
if(a>9)
{
a=0;
diff++;
}
if(diff>9);
{
diff=0;
}
b=a+diff;
if(b>9);
{
b=0;
}
/*Main part of the division quiz */
while(1==1)
{
/* Not allowing division by 0 or answers less than 1 */
if(numbers[b]==0 || (numbers[a]<numbers[b]))
{
a++;
continue;
}
printf("%d %% %d =\n",numbers[a],numbers[b]);
printf("What is the whole number in your answer?\n");
scanf("%d",&ans);
printf("\nWhat is the remainder in your answer?(0 if none)\n");
scanf("%d",&remain);
if((ans==numbers[a]/numbers[b])&&(remain==numbers[a]%numbers[b]))
{
printf("\nYour answer is CORRECT!!!\n");
a++;
}
else
{
printf("\nYour answer is WRONG!!!\n");
divisionquiz();
}
/* Loop for division quiz */
while(1==1)
{
printf("\n1 - Answer another division question\n2 - Go back to main menu\n3 - Exit program\n");
scanf("%d",&again);
if(again==1)
{
clear();
break;
}
else if(again==2)
{
clear();
main();
}
else if(again==3)
{
exit(EXIT_SUCCESS);
}
else
{
printf("%cPlease input a valid option.\n",7);
continue;
}
}
continue;
}
}