在while循环中重新扫描并分配变量

时间:2019-02-03 01:27:26

标签: c

我是编码的新手,因此对任何不了解深表歉意,但是我的程序遇到了两个问题。目的是提示用户输入测试编号,运行测试并输出该编号是否“完美”。之后,提示用户继续测试新的号码或结束程序。我遇到两个问题。 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);
} 

2 个答案:

答案 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相似。