Использование fscanf () для чтения данных и результат вывода сразу исчез - PullRequest
0 голосов
/ 22 марта 2020

Я хочу использовать fscanf () для чтения всей строки (включая пробел) из файла. Файл выглядит следующим образом:

//data.txt

lek yuen
3
wo che
5
wo che
8
wo che
5
wo che
7
sha kok
0
hin keng
9
lung hang
8
sha kok
2
sha kok
4
lung hang
8

Когда я использую buffer, чтобы сохранить его, и printf(), чтобы показать его, результат lek yuen просто выскакивает менее чем за 1 секунду, и все окно cmd исчез. В компиляторе он показывает, что: Process finished with exit code 0 . Ниже мой код:

int main() {
    FILE *fp=fopen("data.txt","r");
    char buffer[255];

    if(fp==NULL){
        perror("File not exist!\n");
        exit(1);
       }

    fscanf(fp,"%[^\n]s",&buffer);
    printf("%s",buffer);
    fclose(fp);

    return 0;
}

Кто-нибудь знает, что случилось? Большое спасибо!

1 Ответ

0 голосов
/ 22 марта 2020

Если вы обеспокоены тем, что окно терминала исчезает:

(1) Откройте его вручную, найдите местоположение вашего исполняемого файла и запустите его вручную. Это окно почти гарантированно не закроется.

(2) В качестве альтернативы вы можете воспользоваться Google для правильного выбора соответствующей настройки в вашей IDE.

(3) В конце main () вы можете попробовать прочитать из Консоль с подсказкой «нажмите Enter, чтобы завершить программу». Как бы надежно это ни казалось, я бы на самом деле отговорил: многие полезные программы могут читать со стандартного ввода, если имя файла не передается, и выводить на стандартный вывод. Смешение несвязанных результатов диагностики c или заставление важной программы ввода / обработки / вывода ждать по запросу, неэлегично и делает жизнь пользователей более сложной, чем необходимо. Как минимум, запросите ввод для стандартной ошибки, а не для стандартного выхода, и просто примите пустую строку в качестве маркера EOF, если ожидаемый результат не имеет. Тогда эта пустая строка будет требованием для ввода по стандарту, например, из перенаправленного файла.

Если вам интересно, почему печатается только одна строка: это потому, что вы печатаете только одну ;-). Как сказал Герхард, используйте al oop, чтобы прочитать и напечатать более одной строки. На самом деле, с таким форматом файла строки не являются особенными; просто прочитайте «слова» (символы между пробелами), если вы можете быть уверены, что слова не содержат пробелов и что всегда есть два, а затем одно число.

...