为什么我必须按ctrl + d几次才能看到scanf?

时间:2013-11-29 12:31:58

标签: c scanf eof

在我的程序中,我需要以这种格式读取数字 - 数字,数字,数字等,当用户按ctrl + d时结束。我切换scanf("%d",&i)scanf("%c",&c)

我的问题是,程序结束,当我按ctrl + d 3次时,第一次和第二次由于某种原因忽略它。我也注意到,如果我调试并写:“5,6ctrl + d”它读取“5”,然后它等待下一个输入。为什么,当有6和ctlr + d时?感谢

我的代码:

for (;;)
{
 if (cislo==1)
  {
   res=scanf("%d",&matice[x][y]);
   if (res==-1)
   {
    ...
    return 1;  /* i want EOF to be after number, not char */
   } else
   {
    ...
    cislo=0;
   }
  } else
  {  
   res=scanf("%c",&znak);
   if (res==-1)
   {
    ...
    break;
   } else
   {
   ...
   cislo=1;
   }; 
 };
};

1 个答案:

答案 0 :(得分:1)

您正在尝试使用3 scanfs()读取3个输入,每个CTRL-D被视为一个输入,因此您的程序会忽略前两个并在第3个之后终止。

对于5, 6ctrl+d之类的输入,scanf()读取整个字符串,但只将5转换为适当的数字并存储在提供的变量中。之后的字符串被丢弃。再次下一个scanf()等待阅读下一个号码。