Программа на C не запущена, но компилируется без ошибок

#c

Вопрос:

это программа, о которой идет речь:

 #include <stdio.h>
#include <tgmath.h>
#include <simpio.h>

long main(){
    long cars_t,years;
    cars_t=80000;
    years=0;
    while (cars_t<=160000){
        cars_t=ceil(cars_t*(1 7/100));
        years =1;
    }
    printf("Xronia:%ldn",years);
    printf("Arithmos Autokinhton:%ldn",cars_t);
}
 

Просто чрезвычайно простая программа с функцией while. Но по какой-то причине она вообще не выдает никаких выходных данных. Однако я заметил, что в тот момент, когда я удаляю функцию while (и код внутри нее), программа работает отлично. Кто-нибудь может сказать мне, как это исправить? заранее спасибо.

Комментарии:

1. cars_t*(1 7/100) для начала это довольно медленный темп роста, но, несмотря на это, 7/100 он равен 0 из-за целочисленного деления, 1 0 = 1 , и, таким образом, вы просто присваиваете значение cars_t самому себе, и оно, вероятно, даже не увеличивается. Чтобы избежать этого, по крайней мере, выполните cars_t=ceil(cars_t*(1 7.0/100))

2. Да, это сработало. Спасибо. Хотите верьте, хотите нет, но на самом деле это университетский проект, я на первом курсе информатики, и они в значительной степени начинают нас с основ.

3. Кроме того, возвращаемый тип from main() должен быть int .

4. Вы должны были ввести соответствующий printf в цикл, и вы бы узнали сами. Кстати, компиляция программы без ошибок или предупреждений ни в коем случае не гарантирует, что она работает должным образом.

5. ^^^^^^ ‘первый год информатики, и они в значительной степени начинают нас с основ’ — требуйте, чтобы вас обучили базовой отладке, прежде чем вы напишете еще одну строку кода. Если вы не можете отлаживать, вы не можете программировать компьютеры 🙂

Ответ №1:

Это потому, что вы объявили cars_t как целое (длинное) значение и 7/100, которые также являются целыми числами и поэтому равны нулю. Следовательно, вы застреваете в цикле, поскольку cars_t не увеличивается.

Вместо этого вы хотите, чтобы cars были плавающим значением и заставляли 7/100 оцениваться как плавающее:

 #include <stdio.h>
#include <tgmath.h>

long main(){
    long years;
    double cars_t;
    cars_t=80000;
    years=0;
    while (cars_t<=160000){
        cars_t=ceil(cars_t*(1 7.0/100));
        years =1;
    }
    printf("Xronia:%ldn",years);
    printf("Arithmos Autokinhton:%lfn",cars_t);
}
 

https://onlinegdb.com/vNusyZ9xD