Пока кругом беру меня на прогулку (в С)! - PullRequest
0 голосов
/ 16 декабря 2018

Я изучаю информатику, пройдя курс Гарварда CS50.Я учусь определять новые функции и связывать две вместе.Я случайно создал скрипт ниже.Моя new_function не в состоянии доставить ложное значение в основную функцию, поэтому мой цикл while печатает как его дикий запад.Есть что-то очевидное, что мне здесь не хватаетспасибо!

#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

bool new_function(int x1);

int main(void)
{
    int whatever = get_int("get_int now!\n");

    while(new_function(whatever) == true)
    {
        printf("still working\n");
    }
}

bool new_function(int x1)
{
    for(int i = 1; i <= x1; i++)
    {
        if(i != 5)
            return true;
        else if (i == 5)
            return false;
    }
    return false;
}

1 Ответ

0 голосов
/ 16 декабря 2018

Для продолжения цикла while условие должно быть истинным.копая глубже, мы видим
new_function(whatever) == true состояние.Таким образом, результат зависит от
new_function(int), который вы написали выше.

Значения, которые ваш new_function(int) получает в качестве аргумента, являются целыми числами.
Для такого типа его доменом являются целые числа изгде-то минус 2³¹ к положительному (2³¹ - 1) значению для 4-байтового целого.

Далее, перед началом цикла for создается новая переменная i, инициализированная как 1, затем она проверяет, является ли i меньше или равно x1.Если true, то он продолжается, иначе завершает цикл for и возвращает false.Таким образом, из этих шагов мы видим, что для значения x1 ниже 1 new_function(int x1) возвращает значение false, в противном случае он входит в цикл.

Далее, в цикл for, где case для i от 1 до x1, при условии, что x1 равно или больше 1, существует условная проверка if (i != 5), поскольку i всегда инициализируется как 1, поэтому отличается от 5, всегда выполняет return true,а остальная часть не достигнута.

Итак, до тех пор, пока вы дадите число больше 0, ваш код будет печататься как дикий запад.:)

...