2014-10-25 3 views
0

Так что я должен реализовать программу, которая работает с текстовым файлом (.txt), который был помещен в stdin следующим образом: ./program [argumets] <textfile.txt без использования таких функций, как fopen, fscanf, malloc и т. Д. Я не знаю, как это сделать. Мне нужно работать с символами в этом текстовом файле (печатать их на экране, печатать максимальное/минимальное значение, сумму печати и т. Д.), А не с самим файлом, так что, может быть, кто-нибудь получил подсказку? Спасибо.Работа с stdin

+0

Основная функция обработки файлов поможет вам. 'Open()' – Haris

+0

[хорошая ссылка может быть полезна] (http://en.cppreference.com/w/c/io)? –

+1

Вам не нужно ничего делать, чтобы получить от stdin. Он автоматически открывается для вас, вы можете просто прочитать его. – Barmar

ответ

0

Чтение из текстового файла, подобного этому, почти идентично чтению с клавиатуры. Настолько, что без каких-либо специальных трюков ваша программа не имеет никакого способа узнать, поступает ли вход от keyboarad или из файла.

Когда вам нужно использовать функцию, которая требует файл, есть stdin, который так называемый «файловый указатель», и имеет тип FILE*, такой же, как возвращаемый fopen. Указатель файла принимается функциями, любимыми fscanf (но вы можете просто позвонить scanf) и fgets (do NOT использовать gets, он смертельно сломан и, наконец, удален из стандарта C11).

Если вам нужно использовать функции, которые принимают дескриптор файла, который является целым числом, и возвращаются, например, open, и принимаются такими функциями, как read, тогда номер дескриптора файла для стандартного ввода равен 0, но вы должны обычно использовать константа STDIN_FILENO. И не смешивайте чтение из файлового дескриптора (небуферизованное) и читайте с FILE* (буферизированный), потому что буферизация испортит полученные вами данные. Использование FILE*, вероятно, лучше для большинства приложений.

Чтобы сделать это более конкретным, вы можете разработать свою программу так, чтобы вместо того, чтобы использовать < для перенаправления входного файла, вы можете открыть входной файл в редакторе, скопировать его в буфер обмена, запустить приложение в терминале и вставьте файл ввода как текст в терминал.

Смежные вопросы