這是我數學測驗計劃的一部分。我嘗試爲我的任務編寫數學測驗,並且想爲我的數學測驗做一個最終報告,如(int report())所示。當我運行該程序時,它表示title()(在modeadd()中)調用的參數太少。當我更改modeadd()中的title()與int title()相同時,我無法返回到菜單並直接轉到report.How我能解決這個問題嗎?我可以將函數的結果帶到另一個函數嗎?
void main()
{
int add, minus, times, divide;
menu(&add, &minus, ×, ÷);
report(add, minus, times, divide);
printf("\n");
system("pause");
}
int menu(add, minus, times, divide)
{
int choice;
printf("\t\t\t\t\t WELCOME TO THE MATH QUIZ.\n\a");
printf("\t\t\t IF YOU ARE READY, ENTER '1' FOR YES. IF NOT, ENTER '2' FOR NO.\n");
printf("\t\t\t\t PLEASE ENTER YOUR CHOICE : ");
scanf("%d", &choice);
rewind(stdin);
while (choice >= 3 || choice <= 0)
{
printf("INVALID NUMBER, PLEASE TRY AGAIN.\n");
printf("PLEASE RE-ENTER AGAIN : ");
scanf("%d", &choice);
rewind(stdin);
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
}
switch (choice)
{
case 1:
title(add, minus, times, divide);
break;
default:
printf("\t\t\t THANK YOU. WELCOME YOU TO TRY WHEN YOU ARE READY.");
}
return choice;
}
int title(int*add, int*minus, int*times, int*divide)
{
int choice;
printf("PLEASE CHOOSE THE TITLE YOU WANT CHALLENGE.\n");
printf("1. ADDITION\n2. SUBTRACTION\n3. MULTIPLICATION\n4. DIVISION\n");
printf("PLEASE ENTER YOUR CHOICE : ");
scanf("%d", &choice);
rewind(stdin);
while (choice >= 5 || choice <= 0)
{
printf("INVALID NUMBER, PLEASE TRY AGAIN.\n");
printf("PLEASE RE-ENTER AGAIN : ");
scanf("%d", &choice);
rewind(stdin);
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
}
switch (choice)
{
case 1:
printf("YOU CHOICE IS NUMBER 1, ADDITION\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
(*add)++;
modeadd();
break;
case 2:
printf("YOU CHOICE IS NUMBER 2, SUBTRACTION\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
(*minus)++;
modeminus();
break;
case 3:
printf("YOU CHOICE IS NUMBER 3, MULTIPLICATION\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
(*times)++;
modetimes();
break;
default:
printf("YOU CHOICE IS NUMBER 4, DIVISION\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
(*divide)++;
modedivide();
break;
}
return choice;
}
int modeadd()
{
int choice;
printf("PLEASE CHOOSE THE DIFFICULT YOU WANT CHALLENGE FOR ADDITION.\n");
printf("1. BEGINNER\n2. INTERMEDIATE\n3. ADVANCED\n4. QUIT TO MENU\n");
printf("PLEASE ENTER YOUR CHOICE : ");
scanf("%d", &choice);
rewind(stdin);
while (choice <= 0 || choice >= 5)
{
printf("INVALID NUMBER, PLEASE TRY AGAIN.\n");
printf("PLEASE RE-ENTER AGAIN : ");
scanf("%d", &choice);
rewind(stdin);
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
}
if (choice == 1)
{
printf("YOUR CHOICE IS NUMBER 1, BEGINNER.\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
ABeg();
}
else if (choice == 2)
{
printf("YOUR CHOICE IS NUMBER 2, INTERMEDIATE.\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
AInter();
}
else if (choice == 3)
{
printf("YOUR CHOICE IS NUMBER 3, ADVANCED.\n");
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
AAdv();
}
else
{
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
printf("YOU HAVE CHOOSE TO BACK TO MENU. ");
title();
}
return 0;
}
//Addition beginner question
int ABeg()
{
int response, i, corAns, wrongAns, num2, num1;
double answer, correct;
printf("PLEASE ENTER THE NUMBER OF QUESTION YOU WANT TO TRY : ");
scanf("%d", &response);
rewind(stdin);
while (response < 0)
{
printf("PLEASE ENTER A VALID NUMBER : ");
scanf("%d", &response);
rewind(stdin);
}
printf("PLEASE ENTER YOUR ANSWER.\n");
if (response == 0)
{
printf("\nTHANKS FOR PLAYING!!!\n");
return 0;
}
else
{
corAns = 0;
wrongAns = 0;
for (i = 1; i <= response; i++)
{
srand(time(NULL));
num1 = rand() % 21;
num2 = rand() % 21;
correct = num1 + num2;
printf("\n%d. %d + %d = ", i, num1, num2);
scanf("%lf", &answer);
rewind(stdin);
if (answer == correct)
{
printf("I KNOW YOU WILL ANSWERED IT CORRECTLY.\n");
corAns++;
}
else
{
printf("SORRY BUT GOOD TRY. THE CORRECT ANSWER IS %.0f.\n", correct);
wrongAns++;
}
}
printf("\nYOUR RESULT\n");
printf("===========\n");
printf("CORRECT ANSWER = %d QUESTION\n", corAns);
printf("INCORRECT ANSWER = %d QUESTION\n", wrongAns);
if (corAns == response)
{
printf("YOU ARE SO HIGHLY INTELLIGENT :). YOU GET THEM ALL RIGHT!!!\n");
nextadd();
}
else if (corAns == wrongAns)
{
printf("GOOD TRY BUT YOU ARE NEARLY FAIL. KEEP WORKING HARDER AND YOU WILL DO BETTER NEXT TIME.\n");
failadd();
}
else if (corAns > wrongAns)
{
printf("YOUR CORRECT ANSWER IS ABOVE HALF. GREAT JOB! XD. PLAY THE GAME AGAIN SOON.\n");
nextadd();
}
else
{
printf("YOU HAVE FAIL IN THIS MATH QUIZ :(. PLEASE DO THE REVISION.\n");
failadd();
}
}
return 0;
}
//Asking after addition question
int nextadd()
{
int choice;
printf("\n----------------------------------PAGE BREAK------------------------------------\n\n");
printf("DID YOU WANT TO CHALLENGE HARDER QUESTION? OR DIFFERENT ARITHMETIC? OR ELSE.\n");
printf("1. CHALLENGE SAME OR DIFFERENT LEVEL WITH SAME ARITHMETIC.\n");
printf("2. DIFFERENT ARITHMETIC.\n");
printf("3. NO, I WANT TO QUIT THE QUIZ.\n");
printf("PLEASE ENTER YOUR ANSWER : ");
scanf("%d", &choice);
rewind(stdin);
while (choice >= 4 || choice <= 0)
{
printf("INVALID NUMBER, PLEASE TRY AGAIN.\n");
printf("PLEASE RE-ENTER AGAIN : ");
scanf("%d", &choice);
rewind(stdin);
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
}
switch (choice)
{
case 1:
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
modeadd();
break;
case 2:
printf("\n----------------------------------PAGE BREAK------------------------------------\n");
title();
break;
default:
printf("THANK YOU FOR YOUR PLAYING.");
}
return 0;
}
int report(int add, int minus, int times, int divide)
{
printf("\n============\n");
printf("FINAL REPORT\n");
printf("============\n");
printf("YOU HAVE PLAY ADDITION FOR %d TIMES\n", add);
printf("YOU HAVE PLAY SUBTRACTION FOR %d TIMES\n", minus);
printf("YOU HAVE PLAY MULTIPLICATION FOR %d TIMES\n", times);
printf("YOU HAVE PLAY DIVISION FOR %d TIMES\n", divide);
return 0;
}
感謝您解決我的問題的一部分,但我的主要「錯誤」是意味着去我試圖調試我的程序,它出來的消息說,有一個建立錯誤。然後它說,在report()中,使用未初始化的局部變量'add','minus','times'和'divide'。所以,我知道可能會有一些遺漏或錯誤的代碼。但是,我找不到它。我也嘗試在main(),title(),menu()中添加,減去次數和除法作爲變量,但我也遇到了同樣的問題。所以我想知道我的錯誤在哪裏,我該如何糾正它。 – NewInProgramming
好的。爲了讓你編譯,你需要在report()中初始化變量add,minus等。爲此,只需爲它們賦值0.(add = 0;)編譯器會抱怨,因爲您試圖在printf中使用這些變量。然而,如果你遵循我的其他建議,這些變量是不需要的。 HTH –
好的。但是當我改變int標題的時候,我也需要改變modeadd()中的title()。但是,當我選擇返回到菜單(在modeadd())中時,這使我無法回到菜單。此外,如果我在mainad中添加while,在nextadd()中,當我選擇退出程序時,它會再次跳轉到菜單。我需要做些什麼來解決它。 – NewInProgramming