我是编码的新手,因此对任何不了解深表歉意,但是我的程序遇到了两个问题。目的是提示用户输入测试编号,运行测试并输出该编号是否“完美”。之后,提示用户继续测试新的号码或结束程序。我遇到两个问题。 1.无论输入的是“ y”还是“ n”,while循环都会继续运行。 2. userInput不会重新分配,而是继续以与第一个输入相同的输入值运行。任何帮助将不胜感激。
void perfectNumber(int userInput) {
int divisor = 0;
int i;
int totalSum = 0;
char cont;
for (i = 1; i < userInput; i++) {
divisor = userInput % i;
if (divisor == 0) {
totalSum = totalSum + i;
}
}
if (totalSum == userInput) {
printf("Number %d is perfect\n", userInput);
}
else {
printf("Number %d is not perfect\n", userInput);
}
printf("Do you want to continue (y/n)? ");
scanf("%c\n", &cont);
}
int main(void) {
int userInput;
char cont = 'y';
while (cont == 'y' || cont == 'Y') {
printf("Enter a perfect number: ");
scanf("%d", &userInput);
perfectNumber(userInput);
}
printf("Goodbye\n");
return(0);
}
答案 0 :(得分:2)
问题是您认为cont
是唯一一个变量。
事实是您有两个cont
变量,并且它们共享的唯一名称是相同的。他们是两个不同的变量具有独特不会忽略。
一个属于main函数,另一个属于perfectNumber函数。
如何返回唯一的cont
变量?
#include <stdio.h>
char perfectNumber(int userInput) {
int divisor = 0;
int i;
int totalSum = 0;
char cont;
for (i = 1; i < userInput; i++) {
divisor = userInput % i;
if (divisor == 0) {
totalSum = totalSum + i;
}
}
if (totalSum == userInput) {
printf("Number %d is perfect\n", userInput);
}
else {
printf("Number %d is not perfect\n", userInput);
}
printf("Do you want to continue (y/n)? ");
scanf(" %c", &cont);
return cont;
}
int main(void) {
int userInput;
char cont = 'y';
while (cont == 'y' || cont == 'Y') {
printf("Enter a perfect number: ");
scanf("%d", &userInput);
cont = perfectNumber(userInput);
}
printf("Goodbye\n");
return(0);
}
请注意,您缺少了#include保护罩,我已添加它。
答案 1 :(得分:0)
cont
中的main
(与cont
中的perfectNumber
不同)在循环内从未更改,并且循环保护仅取决于cont
。两个userInput
相似。