LINUX.ORG.RU

stdin


0

1

Есть программа, все берет из stdin.

Я, запускаю ее в консоли, пишу что нибудь.

Вопрос 1 - Допустим, я читаю из этого стдвхода что либо. Оно кончается. Получу ли я EOF? Видимо нет, ибо данная ситуация предусмотрена, но программа тупо зависает на fgetc, когда введенная ранее строка иссякает.

Вопрос 2 - как получить EOF при вводе с консоли?

Deleted

Последнее исправление: Bizun (всего исправлений: 1)

1. Если оно кончится — получишь EOF. Если висит на fgetc, значит оно еще не кончилось.

2. Нажать ^D

Deleted
()
Ответ на: комментарий от Deleted

По поводу первого пункта не могу перестать сомневаться.

while (isspace(nextc)) {
	nextc = fgetc(f);
}

В этом цикле виснет. Строка в stdin такая : sad sad<ЕНТЕР>, где <ЕНТЕР> сами знаете что.

Deleted
()

Вопрос 2 - как получить EOF при вводе с консоли?

Ctrl + D

Harald ★★★★★
()
for(;;) {
    // Допустим, я читаю из этого стдвхода что либо.
    int c = fgetc(stdin);

    // Оно кончается.
    if (c == EOF) break;
}
schizoid ★★★
()
Последнее исправление: schizoid (всего исправлений: 1)
Ответ на: комментарий от invy

Да нифиги оно так не работает:

int main(int argc, char *argv[]) {
        f = stdin;
        nextc = fgetc(f);
	
	while (isspace(nextc)) {
		puts("start");
			nextc = fgetc(f);
		puts("finish");
	}
	
        return 0;
}

Пишу: ololo^D. Все виснет, ни чего не работает. Программа даже ^C не убивается.

Deleted
()
Ответ на: комментарий от Deleted

Ты либо троллишь, либо что-то сильно не правильно делаешь. Если в эту программу добавить недостающие заголовки и объявления переменных, то она таки скомпилиурется и при вводе ololo^D ничего не на печатает (как и ожидается).

Begemoth ★★★★★
()
Ответ на: комментарий от Deleted

Так блин, почему?

Ты вообще, понимаешь что ты написал? Твоя программа в цикле вычитываетпробельные символы и пока она их вычитывает печатает start, finish. Если ей скормить на вход " ololo" (без кавычек, но с пробелами), она три раза напечатает start и finish.

Она у меня даже не завершается, что ей надо?

У меня завершается. У меня есть подозрение, что ты её запускаешькаким-то сильно извращённым образом (напрмиер, из IDE с перенаправленным внутрь IDE вводом/выводом) и просто не осознаёшь, что программа завершалась.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

IDE. Только при завершении программы в среде разработки я получаю соответствующее сообщение, с ^Д оно не вылазит и более того, если ниже по коду (тот самый финиш) что то попытаться вывести после ввода ^Д, оно не выводится. Ну в чем проблема? Почему нельзя взять, и прогать на мишке в линуксе? На родном то языке, епт!

Deleted
()
Ответ на: комментарий от Begemoth

Все, я кажется разобрался. Во всем виновата IDE.

Deleted
()
Ответ на: комментарий от Deleted

лицо-ладонь :-)

nextc = fgetc(f);
...	
while (isspace(nextc)) {
...
}
...
return 0;

Пишу: ololo^D. Все виснет, ни чего не работает.

чтоб не висло, надо тренировать :) В плане программирования - Керниганом :)

MKuznetsov ★★★★★
()
Ответ на: лицо-ладонь :-) от MKuznetsov

Да читал я читал, аж до половины. Потом как нибудь вторую дочитаю.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.