запрашивать у пользователя значения, пока они не сообщат об окончании файла - PullRequest
3 голосов
/ 21 мая 2019

У меня проблемы с адекватным использованием EOF.

что я хочу: при запуске программы она должна автоматически предлагать пользователю ввести число и выйти, когда пользователь сигнализирует EOF через клавиатуру

что на самом деле происходит: когда я запускаю программу, она сидит и ждет, когда пользователь нажмет клавишу ввода, ТОГДА она предложит пользователю ввести число;это как-то делает мой код глючным

Я НЕ ПРОСИТ НИКАКОГО, ЧТОБЫ СДЕЛАТЬ Мое НАЗНАЧЕНИЕ.Я ЗАВЕРШИЛ 99,8% ЭТОГО.IM NEW C C ПРОГРАММИРОВАНИЕ


#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h> // For exit() 

int main( ) {

    char c;
    while ( (c = getchar()) != EOF)  {

        int user_numbr = 0;
        int file_number = 0;
        int last_Appearance = 0;
        int index = 0;
        bool notFound;

        FILE *fptr;
        fptr = fopen("numbers.text", "r"); 

        printf("Enter a number: ");
        scanf("%d", &user_numbr);


        while ( !feof (fptr) ) {

            fscanf (fptr, "%d", &file_number);
            if ( feof (fptr) ) break;
            index++;

            if ( user_numbr == file_number ) {
                last_Appearance = index;
            }

        }
        fclose(fptr);

        if ( last_Appearance != 0) {
            printf("%d last appears in the file at position ", user_numbr);
            printf("%d\n", last_Appearance);
        }
        else if ((c = getchar()) != EOF)
            printf("%d does not appear in the file\n", user_numbr);

    }

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Я нашел исправление.Я опубликую это, если кто-то, у кого есть эта проблема, увидит это сообщение.

исправления: 1) первый, пока условие цикла 2) последнее еще, если условие

int main( ) {

    char c;
    while ( !feof(stdin) )  {

        int user_numbr = 0;
        int file_number = 0;
        int last_Appearance = 0;
        int index = 0;
        bool notFound;

        FILE *fptr;
        fptr = fopen("numbers.text", "r"); 

        printf("Enter a number: ");
        scanf("%d", &user_numbr);


        while ( !feof (fptr) ) {

            fscanf (fptr, "%d", &file_number);
            if ( feof (fptr) ) break;
            index++;

            if ( user_numbr == file_number ) {
                last_Appearance = index;
            }

        }
        fclose(fptr);

        if ( last_Appearance != 0) {
            printf("%d last appears in the file at position ", user_numbr);
            printf("%d\n", last_Appearance);
        }
        else if ( !feof(stdin) )
            printf("%d does not appear in the file\n", user_numbr);

    }

    return 0;
}
0 голосов
/ 21 мая 2019

Предполагая, что вы хотите, чтобы пользователь вводил номер файла только один раз, вам, вероятно, следует переместиться

printf("Enter a number: "); scanf("%d", &user_numbr);

над циклом while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...