Почему моя программа компилируется, но ничего не делает? - PullRequest
0 голосов
/ 10 апреля 2020
#include <stdio.h>
#include <cs50.h>
#include <math.h>

int * get_digs(long card, int digs, int idigs[]);

int main()
{
    long card = get_long("Number: ");
    int digs = ceil(log10(card));
    int idigs[digs];

    get_digs(card, digs, &idigs[digs]);

    for(int k = 0; k == digs; k++) // This loop is to check if the program is doing what I'm 
    {                              // asking it to do.
        printf("%i", idigs[k]);
    }
}

int * get_digs(long cd, int dg, int idg[])
{
    int j = dg;
    int dig = 0;

    for(int i = 0; i == dg; i++)
    {
        dig = floor(cd / pow(10, j));
        j--;
        idg[i] = dig % 10;
    }
    return 0;
}


Эта программа должна принимать данные от пользователя, скажем, с кредитной карты, получать ее цифры и сохранять их в массиве. Программа компилируется, но даже не печатает for l oop в основной функции ... Она просто запрашивает ввод. Что я делаю не так?

1 Ответ

1 голос
/ 10 апреля 2020

Второе выражение в блоке управления for l oop является условием для итерации, а не для прерывания из l oop. Таким образом, этот for l oop ...

    for(int k = 0; k == digs; k++)

... выполняет тело l oop, только если k равно digs, и это будет верно в первый раз, когда условие проверяется, только если digs равно нулю, чего вы (разумно) не ожидаете. Кроме того, если бы k также не было изменено внутри тела l oop, которого нет в вашем коде, тело никогда не будет выполнено более одного раза. По сути, это похоже на if (k == digs), и, конечно, тело l oop не выполняется ни разу.

Стандартная идиома для того, что вы пытаетесь сделать, использует выражение < в условие:

    for (int k = 0; k < digs; k++)
...