2013-10-13 4 views
-2

Я написал программу для чтения из входных посимвольна и распечатать его на выход, и вот мой код:Почему getchar не выполняется после первой итерации?

#include <stdio.h> 

main() 
{ 

    int c; 
    while((c = getchar()) != EOF) 
    { 
     printf("%s\n", "log1"); 
     printf("%c\n", c); 
     printf("%s\n", "log2"); 
    } 

} 

и это результат:

a(my input) 
log1 
a 
log2 
log1 


log2 

, но он должен иметь этот результат :

a 
log1 
a 
log2 

Что с этой программой?

+4

Вы поищите несколько сотен связанных ответов на SO, прежде чем нажать «отправить свой вопрос» Button? – P0W

+1

Вы уверены, что, вы не вводите ничего, кроме символа 'a'? –

+0

Угадайте, что вы ввели, прежде чем ему сказали не делать этого. Bad boy –

ответ

2

вы даете вход а и символ новой строки

a(my input) You are giving a and newline 

//this is because of a 
log1 
a 
log2 

//this is because of newline 
log1 


log2 

Проверка новой строки и избежать печати Newline.

while((c = getchar()) != EOF) 
     { 
      if(c!='\n') 
       { 
       printf("%s\n", "log1"); 
       printf("%c\n", c); 
       printf("%s\n", "log2"); 
       } 
     } 
0

Это происходит потому, что вы while((c = getchar()) != EOF) заканчивается после удара EOF. Это связано с тем, что когда вы вводите что-то, и вы нажимаете клавишу ввода, тогда все хранится во внутреннем буфере.

Ваш код останавливается, когда getchar ничего не находит в этом буфере.

Вы также можете проверить это: - Where does getchar() store the user input?

+0

Попробуйте нажать Ctrl + D после некоторого ввода. –

0

getchar работает во второй итерации. Проблема в том, что ваш вход был фактически «a [enter]», поэтому второй символ, который читал getchar, был символом новой строки, и он напечатал это.

Если вы укажете ввод «abc», все может показаться более ясным.

0

while (getchar()! = '\ N');

Помните, что выражение в цикле while выполняется каждый раз - поэтому даже когда символ «\ n» найден, он уже удален из потока вызовом getchar().

0

Место условие не печатать \n (по нажатию Enter

while((c = getchar()) != EOF) 
     { 
      if(c != '\n') 
      printf("%s\n", "log1"); 
      printf("%c\n", c); 
      printf("%s\n", "log2"); 
     } 
Смежные вопросы