Чтение из .in файла в c - PullRequest
       6

Чтение из .in файла в c

0 голосов
/ 03 сентября 2018

Я кодировал этот файл c, который читает ровно 2 целых числа строки файла .in. Пока мой код выглядит так:

#include <stdio.h>

void divideTwoNums()
{
    int c = 0;
    int num1 = 0;
    int num2 = 0;
    int product = 0;
    c = getchar();

    while (c != '\n' && c != ' ' && c != '\t')
    {
        num1 = 10 * num1 + (c - '0');
        c = getchar();
    }
    c = getchar();
    while (c != '\n' && c != ' ' && c != '\t')
    {
        num2 = 10 * num2 + (c - '0');
        c = getchar();
    }
    product = num1 / num2;
    printf("%d / %d = %d\n", num1, num2, product);
}
int main(void)
{
    divideTwoNums();
    return 0;
}

Когда я пытаюсь этот код на .in-файле, как это:

96 16

Мой файл .out выглядит так:

96 / 16 = 6

Итак, я знаю, что делаю что-то правильно, потому что код работал для одной строки. Тем не менее, я застрял, когда дело доходит до нескольких строк. Допустим, мой .in файл выглядит так:

96 16
50 10

Мой код не будет работать, потому что у меня нет цикла while в методе divTwoNums, который помогает мне перейти к следующему предложению. Я пробовал разные вещи, но они были безрезультатны. Ребята, вы можете мне помочь?

редактирование:

Screenshot of the code for R Sahu

1 Ответ

0 голосов
/ 03 сентября 2018

Есть несколько вопросов, с которыми вам нужно разобраться:

  1. Использование цикла для деления чисел на дополнительные строки.
  2. Определение момента выхода из цикла, то есть обнаружение отсутствия ввода.

Первый шаг можно выполнить с помощью цикла while в main.

int main(void)
{
    while ( 1 )
    {
       divideTwoNums();
    }
    return 0;
}

Чтобы обнаружить, что нет ввода, вы должны сделать пару вещей.

  1. Проверьте возвращаемое значение getchar(). Если возвращаемое значение EOF, больше нет ввода.

  2. Возвращает значение из divideTwoNums(), чтобы указать, что больше нет ввода.

Вот скелетное обновление функции. Я предполагаю, что вы можете завершить все остальное.

// The return value needs to be int instead of void.
int divideTwoNums()
{
   ...

   c = getchar();
   if ( c == EOF )
   {
      // Return 0 to indicate to stop the loop.
      return 0;
   }

   ...

   // Return 1 to indicate to continue with the loop.
   return 1;
}

и изменить main на:

int main(void)
{
    int cont = 1;
    while ( cont )
    {
       cont = divideTwoNums();
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...