【问题标题】:Why do i have to press ctrl+d several times for scanf to see it?为什么我必须按 ctrl+d 几次才能让 scanf 看到它?
【发布时间】:2013-11-29 12:31:58
【问题描述】:

在我的程序中,我需要读取这种格式的数字——数字、数字、数字等,当用户按下 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;
   }; 
 };
};

【问题讨论】:

  • Bump,还有更多帮助吗?不知道如何编辑代码以使其正常工作

标签: c scanf eof


【解决方案1】:

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

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

【讨论】:

  • 编辑了我的帖子,所以有代码。我不太确定你在说什么我应该改变
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
相关资源
最近更新 更多