在我的程序中,我需要以这种格式读取数字 - 数字,数字,数字等,当用户按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;
};
};
};
答案 0 :(得分:1)
您正在尝试使用3 scanfs()
读取3个输入,每个CTRL-D
被视为一个输入,因此您的程序会忽略前两个并在第3个之后终止。
对于5, 6ctrl+d
之类的输入,scanf()
读取整个字符串,但只将5
转换为适当的数字并存储在提供的变量中。之后的字符串被丢弃。再次下一个scanf()
等待阅读下一个号码。