2017-02-10 12 views
0

Это то, что я написал. Я предполагаю, что это может быть что-то с логикой моего цикла while, но я не могу это заметить! Любая помощь приветствуется! Благодарю.Почему я запускаю пустую таблицу при запуске этой программы?

#include <stdio.h> 
#include <math.h> 

//Open main function. 
int main(void) 
{ 
    double new_area, area_total = 14000, area_uncut = 2500, rate = 0.02, years; 
    int count = 0; 

    printf("This program is written for a plot of land totaling 14000 acres, " 
      "with 2500 acres of uncut forest\nand a reforestation rate " 
      "of 0.02. Given a time period (years) this program will output a table\n" 
      "displaying the number acres reforested at the end of " 
      "each year.\n\n\n"); 

    printf("Please enter a value of 'years' to be used for the table.\n" 
      "Values presented will represent the number acres reforested at the end of " 
      "each year:>> "); 

    scanf("%lf", &years); 

    years = ceil(years); 

    printf("\n\nNumber of Years\t\tReforested Area"); 

    while (count <= years); 
    { 
     count = count + 1; 
     new_area = area_uncut + (rate * area_uncut); 
     printf("\n%1.0lf\t\t\t%.1lf", count, area_uncut); 
     area_uncut += new_area; 
    } 

    return 0; 
} 
+0

Где он останавливается в программе ..... он даже входит в цикл while? Добавьте несколько других операторов печати и отлаживайте их таким образом –

+0

'printf (" \ n% 1.0lf \ t \ t \ t% .1lf ", count, area_uncut);' вы печатаете 'int' (' count'), используя ' % lf', это неопределенное поведение (изменение на '% d'). –

+6

'while (count <= years);' - ';' создает пустой корпус цикла. Включите полные предупреждения в своем компиляторе, он должен предупредить об этом. – Barmar

ответ

4

Существует дополнительный ; в конце этой линии: while (count <= years);

Он распознана как пустое тело для цикла while, заставляя его итерацию навсегда, так как count не обновляется вообще.

Вот способ, чтобы избежать такого рода глупой ошибки: использовать стиль Kernighan и Ritchie, где { находится в конце строки запуск управления блоком:

while (count <= years) { 
    count = count + 1; 
    new_area = area_uncut + (rate * area_uncut); 
    printf("\n%d\t\t\t%.1f", count, area_uncut); 
    area_uncut += new_area; 
} 

С этим стилем, дополнительный ; гораздо менее вероятно, напечатав и будет гораздо проще определить как несоответствующий.

Также обратите внимание, что count был определен как int, поэтому формат printf также был неправильным. Определенно скомпилируйте с включенными предупреждениями.