«Процесс завершен со статусом -1073741510 (0 минут, 6 секунд)» - PullRequest
0 голосов
/ 19 апреля 2019

Сначала printf работает, но я получил эту проблему в функции:

"Process terminated with status -1073741510 (0 minute(s), 6 second(s))"

У меня просто есть количество цифр, и я хочу рассчитать количество страниц, которое можно пронумеровать этим числом

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "book.h"

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", no_pages);
}

Это функция, которая рассчитывает количество страниц

int no_of_pages(long no_digits)
{

    long no_pages=0,no_digits_page;

    while(no_digits>0)
    {
        no_pages++; // count number of pages
        long  aux=no_pages;
        long no_digits_pages=0; // conut how many digits are on a page

        while(aux)
        {
            aux=aux/10;
            no_digits_page++;
        }
        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<0)
    {
        return no_pages-1;
    }
    else
        return no_pages;
}

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

в 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

Программа завершает работу, но не знает, рассчитывает ли она ожидаемый результат

0 голосов
/ 19 апреля 2019

Кажется, ваша проблема связана с циклом while(no_digits>0).

Действительно, вы работаете только тогда, когда no_digits_page находится в диапазоне 1..9.

Одна простая поправка может быть:

int no_of_pages(long no_digits)
{
    long no_pages=0,no_digits_page;

    while(no_digits>0)
    {
        no_pages++; // count number of pages
        long  aux=no_pages;
        long no_digits_pages=0; // count how many digits are on a page

        while(aux)
        {
            aux=aux/10;
            no_digits_page++;
        }

        /**
         * CORRECTION'S HERE
         * instead of using a complicated if / else for each case, simplify with: 
         */
        no_digits = no_digits - no_digits_page ;

    }

    if (no_digits<0)
    {
        return no_pages-1;
    }
    else
        return no_pages;
}

Тем не менее, я не уверен, что этот кусок кода решит всю вашу проблему.

* What is the code supposed to do?
* What is the problem you want to solve?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...