в no_of_page
переменная no_digits_page
не инициализирована, поведение не определено
Есть много возможностей, где вы не можете изменить no_digit
и цикл без конца
Обратите внимание, что функцию можно легко упростить, заменив
if(no_digits_page == 1)
no_digits--;
else
if(no_digits_page == 2)
no_digits=no_digits-2;
else
if(no_digits_page == 3)
no_digits=no_digits-3;
else
if(no_digits_page == 4)
no_digits=no_digits-4;
else
if(no_digits_pages == 5)
no_digits=no_digits-5;
else
if(no_digits_page == 6)
no_digits=no_digits-6;
else
if(no_digits_page == 7)
no_digits=no_digits-7;
else
if(no_digits_page == 8)
no_digits=no_digits-8;
else
if(no_digits_page == 9)
no_digits=no_digits-9;
по
if ((no_digits_page >= 1) && (no_digits_page <= 9))
no_digits -= no_digits_page;
Вероятно, вы путаете no_digits_page
и no_digits_pages
, если я удаляю один из них, также используя мою упрощенную версию:
int main()
{
long no_pages, no_digits;
srand(time(0));
no_digits=(rand()% 10000000)+10000;
printf("The number of digits are %ld", no_digits);
no_pages = no_of_pages(no_digits);
printf ("\n The number of pages are %ld\n", no_pages);
}
int no_of_pages(long no_digits)
{
long no_pages=0;
while(no_digits>0)
{
no_pages++; // count number of pages
long aux=no_pages;
long no_digits_page=0; // conut how many digits are on a page
while(aux)
{
aux=aux/10;
no_digits_page++;
}
if ((no_digits_page >= 1) && (no_digits_page <= 9))
no_digits -= no_digits_page;
}
if (no_digits<0)
{
return no_pages-1;
}
else
return no_pages;
}
Компиляция и выполнение (объявление no_of_pages
в book.h ):
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall a.c
pi@raspberrypi:/tmp $ ./a.out
The number of digits are 2211616
The number of pages are 387120
Программа завершает работу, но не знает, рассчитывает ли она ожидаемый результат