Повторное сканирование и присвоение переменной в цикле while - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в кодировании, поэтому я прошу прощения за любое невежество, но я столкнулся с двумя проблемами с моей программой.Цель состоит в том, чтобы предложить пользователю ввести номер теста, запустить тест и вывести, является ли номер «идеальным».После этого пользователю предлагается продолжить тестирование нового номера или завершить программу.Я сталкиваюсь с двумя проблемами.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 голосов
/ 03 февраля 2019

Проблема в том, что вы думаете, cont - единственная переменная.

Правда в том, что у вас есть две cont переменные, и единственное, что они разделяют, это одно и то же имя.Это две разные переменные с уникальными адресами.

Одна принадлежит основной функции, другая принадлежит функции 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 guard, я добавил его.

0 голосов
/ 03 февраля 2019

cont в main (что не совпадает с cont в perfectNumber) никогда не изменяется внутри цикла, и защита цикла зависит только от этого cont.Аналогичная вещь с двумя userInput с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...