Правильное использование EOF в C - PullRequest
0 голосов
/ 01 июня 2011

Я новичок в программировании, и я действительно хочу научиться писать достойную программу.Я не совсем уверен, как использовать EOF.Моя программа была скомпилирована, и когда я ее запускаю, она работает нормально, за исключением части EOF.Предполагается, что программа вернет значение -1 (после использования CTRL + z) основной функции и напечатает инструкцию, а затем закроет программу.Значение -1 отличается от значения EOF как такового.

 #include <stdio.h>
//Function Declaration
int inputFunction (int num);

int main (void)
{
    //Local Declarations
    int num;
    do
    {    
    inputFunction (num);

    if (num < 0 || num > 100)
            inputFunction (num);
    else
        inputFunction (num);
    }while (num != -1);
    return 0;
}
int inputFunction (int num)
{
    int rc;

    do
    {
    printf("Enter an integer from 0 to 100: \n");
    rc = scanf("%d", &num);
       {
       if (rc != EOF)
              {
              if (num < 0 || num >100)
                 {
                 printf("ERROR\n");
                 return num;
                 }
              else
                  {
                 return num;
                 }
              }
       else
           {
           num = -1;
           return num;
       }
       }  
    }while (rc != EOF);
    }

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Переменная num никогда не назначается в main. Вы вызываете inputFunction, и оно возвращает значение, но вы игнорируете возвращаемое значение.

2 голосов
/ 01 июня 2011

Значение ASCII для CTRL-Z (^ Z), которое часто используется в качестве маркера конца файла в DOS, равно 26 (десятичному). Помните, что вы передаете переменную num в main как , вызываязначение не является справочным, поэтому при сравнении оно будет содержать значение мусора.

1 голос
/ 01 июня 2011

Как заявил Гейб, вам необходимо присвоить возвращаемое значение inputFunction (), чтобы использовать его - потому что переменные в функциях имеют local scope.Поэтому каждый раз, когда вы вызываете inputFunction () в main (), вы должны делать это так:

num = inputFunction(num);

В противном случае значение num в inputFunction () теряется, когда выполнение программы возвращается к main ().Это основная причина того, что ваша программа не работает должным образом.

Есть также некоторые логические проблемы с вашим кодом.В первом операторе if / else в main () оба оператора дают одинаковый результат.Другое поведение может быть не совсем то, что вы хотите сделать.

Я думаю, что вы могли бы извлечь выгоду из планирования с ручкой и бумагой, что вы хотите, чтобы программа делала.Один из способов - «наметить», что программа будет делать со стрелками и т. Д. (Блок-схема).Или вы можете начать с описания предложения, состоящего из 1-2 предложений, а затем постепенно расширять его до все большего и большего количества деталей, пока у вас не будет серии задач, которые программа выполнит, и затем вы сможете преобразовать ее в код.

...