Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while(scanf)的输入问题:为什么使用getchar()可以继续输入_C_Input_Getchar - Fatal编程技术网

while(scanf)的输入问题:为什么使用getchar()可以继续输入

while(scanf)的输入问题:为什么使用getchar()可以继续输入,c,input,getchar,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 : %

我试图通过
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()
中进行的吗?

关于扫描的主题

现在,当您使用getChar时,具体发生了什么?您的意思是它到达一个无限循环,还是它通过while循环并“继续”?

在这段代码中

while(scanf("Dia %d %d : %d : %d Dia %d %d : %d : %d",&day_start,&h1,&m1,&s1,&day_end,&h2,&m2,&s2)==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();
    ......;
}
第一次执行后,最后按下的回车键被视为第二个
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)
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

我相信这是正确的。getchar()读取换行符。您应该使用fgets读取整行,然后在行上使用sscanf。我的意思是它通过while循环并“继续”。是的。在第一次迭代中,scanf接受8个输入并返回8个,这使得程序运行。但是,在第二次迭代中,scanf只接受了1个输入(上一次输入)。因此,由于scanf返回的1为false,循环没有继续。getchar()接受上一次输入,不让它进入输入的第二次迭代。