我必须创建一个程序,根据用户的选择,找到一个数字的阶乘或数字的总和。如果用户按下“N”,则可以退出程序。直到用户按下'N'退出,我必须一遍又一遍地启动程序,直到用户最终退出。
我已经完成了所有必需的任务,但是当他/她找到阶乘或数字之和后调用函数时,程序会连续调用两次。这不是我期望的行为。它应该只被调用一次。
这里是代码
#include <stdio.h>
#include <stdlib.h>
void getFactorial(void);
void getSumOfDigits(void);
void startProgram();
int main() {
startProgram();
return 0;
}
void startProgram() {
char operation = ' ';
printf(
"Select operation: \n"
"\t1 For Factorial of a number\n"
"\t2 For Sum of digits in a number\n\n"
"\tPress N' to exit program\n\n"
"\t"
);
operation = getchar();
if(operation == 49)
getFactorial();
else if(operation == 50)
getSumOfDigits();
else if(operation == 78 || operation == 110)
exit(0);
startProgram();
}
void getFactorial() {
int facto = 1, n1 = 0;
printf("\n\tEnter the number you want to get factorial of: ");
scanf("%d", &n1);
for(int i = 1; i <= n1; i++) {
facto*=i;
}
printf("\n\tFactorial: %d\n\n\t", facto);
}
void getSumOfDigits() {
int lastDigit = 0, digit = 0, sum = 0;
printf("\n\tEnter a digit: ");
scanf("%d", &digit);
while(digit) {
lastDigit = digit % 10;
sum += lastDigit;
digit /= 10;
}
printf("\n\tSum: %d\n\n\t", sum);
}
我试图调用函数不是当startProgram()结束时,但当阶乘或数字总和程序结束时,但我没有效果。当我开始写程序时,我正在调用main,但在这个错误之后,我试图使它成为自己的独立函数,并使用main来调用它。不工作,它仍然是连续调用两次。
这是我得到一个数的阶乘后的输出。提示符将打印两次。
Select operation:
1 For Factorial of a number
2 For Sum of digits in a number
Press N' to exit program
1
Enter the number you want to get factorial of: 5
Factorial: 120
Select operation:
1 For Factorial of a number
2 For Sum of digits in a number
Press N' to exit program
Select operation:
1 For Factorial of a number
2 For Sum of digits in a number
Press N' to exit program
1条答案
按热度按时间qyswt5oh1#
因此,每次输入既不是“n”也不是“N”时,您都会意外地连续观察到两次提示。
但是你提供的日志(在评论中,格式阻碍了你......)我解释为
输出量:
阶乘按1数字和按2
输入:
1
输出量:
输入数字:
输入:
2
输出量:
阶乘:2
阶乘按1数字和按2
阶乘按1数字和按2
幕后发生的是:
main()
。startProgram()
。main()
调用的startProgram()
。49
相比(顺便说一下,最好使用'1'
)是相同的。getFactorial()
。getFactorial()
。"\n\tEnter the number you want to get factorial of: "
。n1
。scanf()
做出React的“return”。"\n\tFactorial: %d\n\n\t"
,编号2。getFactorial()
。startProgram()
,结束if-else-tree。startProgram()
(这是你应该循环的地方.)。开始执行startProgram(),从startProgram()调用。"Select operation: \n\t1 For Factorial of a number\n\t2 For Sum of digits in a number\n\n\tPress N' to exit program\n\n\t"
。else
来处理你没有想到的事情。startProgram()
。