输入while(scanf)的问题:为什么使用getchar()会保持输入的进行

时间:2014-04-27 07:52:34

标签: c input getchar

我正在尝试通过while(scanf)进程获取8个输入。起初,我尝试了以下代码:

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()

2 个答案:

答案 0 :(得分:1)

关于scanf的主题......

http://www.giannistsakiris.com/2008/02/07/scanf-and-why-you-should-avoid-using-it/

现在使用getChar时会发生什么?你的意思是它达到一个无限循环,或者它通过while循环而且"继续前进"?

答案 1 :(得分: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