Я пытаюсь перебрать stdin, но поскольку мы не можем знать длину stdin, я не уверен, как создать цикл или какое условие использовать в нем.Loop over stdin in C
В основном моя программа будет передана по некоторым данным. Каждая строка данных содержит 10 символов данных, с последующим разрывом строки (So 11 символов в строке)
В псевдокоде, что я пытаюсь выполнить:
while stdin has data:
read 11 characters from stdin
save 10 of those characters in an array
run some code processing the data
endwhile
Каждая петля время цикл переписывает данные в те же 10 байтов данных.
До сих пор я понял, что
char temp[11];
read(0,temp,10);
temp[10]='\0';
printf("%s",temp);
примет первые 11 символов из стандартного ввода, и сохранить его. Позднее printf будет заменен большим количеством кода, который анализирует данные. Но я не знаю, как инкапсулировать эту функциональность в цикле, который будет обрабатывать все мои данные из stdin.
Я попытался
while(!feof(stdin)){
char temp[11];
read(0,temp,11);
temp[10]='\0';
printf("%s\n",temp);
}
но когда это дойдет до последней строки, он продолжает повторно печатать его без прекращения. Любые рекомендации будут оценены.
Вы смешиваете в буфер и небуферизованный ввод/вывод (чтение() не является буфером , поэтому feof (по-видимому, никогда не запускается). Попробуйте fread(). Также: проверьте свои возвращаемые значения! Что читает() return? –
Вас, возможно, заинтересует этот вопрос: http://stackoverflow.com/questions/5431941/ почему-is-while-feof-file-always-wrong. В двух словах: конец условия файла обнаруживается только во время попытки чтения, цикл должен быть оставлен в этом случае после чтения, потому что буфер не содержит значимые данные. –
См. ['While (! Feof (stdin))' всегда ошибочно] (http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) для обсуждения того, почему вы не знаете, t напишите свой цикл таким образом. Кроме того, вы читаете из дескриптора файла 0, поэтому стандартные функции ввода-вывода не будут знать, достигли ли вы EOF или нет. Проверьте результат возврата из 'read()'; он сообщает вам, сколько символов он читает. Он возвращает 0 на EOF и -1 на другие ошибки. Который, помимо URL-адреса, во многом совпадает с тем, что написал Питер А Шнайдер. Вы можете сделать лучше с 'fgets()' или 'fread()'. Это зависит, в частности, от данных. –