2011-10-15 68 views
1

我從一個while循環使用scanf()鍵盤讀取輸入,並在屏幕上打印回用printf()scanf和printf如何在while循環中工作?

#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
    char ch; 

    printf("enter your name"); 

    while(ch!='/n') 
    { 
     scanf("%c",&ch); 
     printf("%c",ch); 
    } 
    getch(); 
    return 0; 
} 

我想知道如何printf()打印屏幕上的價值,因爲當用戶按下進入鍵,程序不在循環中。

+0

我認爲海報意味着''\ n''。 –

回答

2

這不是分配給它的值之前檢查的ch(在while循環)的值是一個好主意。

  • 首先進入循環之前,它會檢查是否ch等於"\n"其中它不(希望)。

    while(ch!='/n') 
    
  • 它進入循環。 scanf()執行,等待輸入。假設您輸入"a",然後按輸入

    scanf("%c",&ch); 
    
  • 當遇到空格字符時,它會繼續到下一行,它會打印先前輸入的字符。

  • 然後再次檢查:這次是ch==a,所以它再次進入循環。
  • 現在,scanf()再次執行,輸入緩衝區已經有"\n",它被讀取。

    scanf("%c",&ch); //This time INPUT BUFFER already has "\n" 
           //so it wont ask for user input. 
    
  • "\n"閱讀更早,打印。

  • 現在,ch == "\n",所以循環退出。

美中不足的是,即使你從輸入讀取"a",輸入緩衝區已經有"\n"在執行第二次循環時。爲了避免這樣的情況,你應該使用

scanf("%c\n", &ch) 
0

用戶需要在scanf返回前打印「\ n」。它被稱爲「buffered I/O」。

最終的「getchar()」只是在您有機會看到結果之前讓程序退出。例如,如果您的程序是從Windows命令提示符下運行的,並且命令提示符在程序退出後立即消失,則這很重要。

0

scanf不輸入孔線。它只輸入直到找到空格字符(即'\n'' ')。輸入過程在按下ENTER鍵後開始。它繼續輸入unitl它發現一個白色字符。就拿這個例子:

輸入:

h s a e f o w 2 4 ; f e e 
*Then ENTER-KEY was pressed) 

輸出:

h s a e f o w 2 4 ; f e e 

如果我們輸入查詢字符串,它不會」得到孔線,但一個字一個字:

輸入:(使用scanf("%s", &str)):

Hello World C language! 
(Then ENTER-KEY was pressed) 

輸出:(使用printf("%s\n", str)):

Hello 
World 
C 
Language! 
+0

爲了準確,scanf()在到達空白字符時停止。 –