2014-04-27 37 views
0

我試圖通過while(scanf)過程中採取8個輸入。起初,我試了下面這段代碼:與同時輸入的問題(scanf函數):爲什麼使用getchar並不()保持輸入要

while(scanf("Dia %d %d : %d : %d Dia %d %d : %d : %d",&day_start,&h1,&m1,&s1,&day_end,&h2,&m2,&s2)==8)  

但是,在一次程序執行後,它終止。然後,我用一個getchar()輸入後,如下所示:

while(scanf("Dia %d %d : %d : %d Dia %d %d : %d : %d",&day_start,&h1,&m1,&s1,&day_end,&h2,&m2,&s2)==8) 
{ 
    getchar(); 
    ......; 
} 

這樣做後,輸入保存每次執行後怎麼回事。那麼,爲什麼使用getchar()保持輸入?

是因爲,最後一個輸入被當作輸入並且在使用getchar()之後,輸入被輸入了getchar()

+1

我相信這是正確的。 getchar()讀入換行符。 –

+0

你應該讀一整行使用fgets,然後在行上使用sscanf – Brandin

回答

0

在這一段代碼

while(scanf("Dia %d %d : %d : %d Dia %d %d : %d : %d",&day_start,&h1,&m1,&s1,&day_end,&h2,&m2,&s2)==8) 

第一執行最後按下的輸入鍵被取爲第二scanf的第一個字符,它必須是D後繼續,並且這不可能是到達。

而在這段代碼

while(scanf("Dia %d %d : %d : %d Dia %d %d : %d : %d",&day_start,&h1,&m1,&s1,&day_end,&h2,&m2,&s2)==8) 
{ 
    getchar(); 
    ......; 
} 

最後輸入鍵進入getchar()scanf

+1

是的。在第一次迭代中,scanf接收了8個輸入並返回了8個使程序運行。但是,在第二次迭代中,scanf只輸入了1個輸入(前一個輸入)。所以,當scanf返回1是錯誤的,循環沒有繼續。 getchar()取最後一個輸入,並且沒有讓它進入輸入的第二次迭代。 – ihayet

相關問題