2014-04-27 39 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

相关问题