为什么我必须按ctrl+;d多次让scanf看到它?

为什么我必须按ctrl+;d多次让scanf看到它?,c,scanf,eof,C,Scanf,Eof,在我的程序中,我需要以这种格式读取数字——数字、数字、数字等,当用户按ctrl+d时,它结束。I开关scanf(“%d”和&I)和scanf(“%c”和&c) 我的问题是,当我按ctrl+d三次时,程序结束,第一次和第二次由于某种原因忽略它。我还注意到,如果我调试并写入:“5,6ctrl+d”,它将读取“5”,然后等待下一个输入。为什么,当已经有6和ctlr+d时?谢谢 我的代码: for (;;) { if (cislo==1) { res=scanf("%d",&mati

在我的程序中,我需要以这种格式读取数字——数字、数字、数字等,当用户按ctrl+d时,它结束。I开关
scanf(“%d”和&I)
scanf(“%c”和&c)

我的问题是,当我按ctrl+d三次时,程序结束,第一次和第二次由于某种原因忽略它。我还注意到,如果我调试并写入:“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;
   }; 
 };
};

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


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

编辑了我的帖子,所以有代码。我不太清楚你在说什么,我应该换一辆车,还有什么需要帮忙的吗?不知道如何编辑代码才能正常工作