Почему цикл while останавливается перед оператором else? - PullRequest
0 голосов
/ 15 июня 2019

Я хочу выполнить выходные данные в выражениях else (True или Nothing), но по какой-то причине мой цикл while выполняется только сначала в операторе if, либо в противном случае if.Я знаю, что я использую бесконечный цикл, но я хочу выйти из него, используя функцию break, которая находится в одном из двух других операторов.Я хочу выполнить операторы else, так что, у них есть волосы?-> Y -> Месси?-> Y-> Верно.Или у них есть волосы -> N -> Бекхэм?-> Y -> Верно.Или у них есть волосы -> N -> Бекхэм -> N -> Ничего.Или у них есть волосы -> T-> Messi-> N-> Nothing

#include <stdio.h>
#include <strings.h>



int random(char z[]);


int main() {

    char *x ="Do they have hair";
    char *yes = "Messi";
    char *no = "Beckham";
    char *u ="Nope";


    do {
        char *currents = x;
        while (1) {
            if (random(currents)) {
                if (yes) {
                    currents = yes;
                    printf("First check\n");
                } else {
                    printf("True: %s\n", yes);
                    break;
                }

            } else if (no) {
                currents = no;
                printf("False\n");

            } else {
                printf("Nothing\n");
                break;
            }
        }
    }while(random("Run Again?"));
    return 0;
}
int random(char z[])
{
    char a[3];
    printf("%s: %s",z,a);
    fgets(a, 3,stdin);

    return a[0] == 'y';
}

1 Ответ

1 голос
/ 15 июня 2019

Ваш цикл while не может быть завершен, потому что if (yes) и if(no) всегда true.

yes равно Messi.Все ненулевые значения обозначаются как true.Таким образом, ваше значение yes всегда имеет адрес памяти, в котором сохраняется Messi.и он всегда ненулевой.
no тоже одно и то же.no всегда указывает на Beckham.Итак, это true

Итак, я изменил код для вашей логики.Пожалуйста, используйте следующий код:

#include <string.h>
#include <iostream>
#include <stdio.h>

int random(char z[]);
int main() {

    char x[] = "Do they have hair";
    char again[] = "run again";
    char yes[] = "Messi";
    char no[] = "Beckham";
    char u[] = "Nope";

    do {
        if (random(x)) {
            if (random(yes)) printf("True!\n");
            else printf("Nothing!\n");
        }
        else {
            if (random(no)) printf("True!\n");
            else printf("Nothing!\n");
        }
    } while (random(again));
    return 0;
}
int random(char z[])
{
    char a[3];
    printf("%s?:", z);
    fgets(a, 3, stdin);

    return a[0] == 'y';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...