C 如何通过标准输入使以下条件失效
上面的代码从stdin获取输入并不断重复,但是如何结束呢?我知道scanf可以返回EOF,所以如果我添加一个类似C 如何通过标准输入使以下条件失效,c,string,C,String,上面的代码从stdin获取输入并不断重复,但是如何结束呢?我知道scanf可以返回EOF,所以如果我添加一个类似 void main() { float x; while(scanf("%f",&x) != 0) printf("%f\n",x); } 来自stdin的哪个输入会导致上述两种情况中的任何一种失败? ctrl+d将使程序结束,但我想知道是否有任何特定的输入会导致此条件失败?scanf函数返回成功扫描的输入项目数 如果在第一次成功转换或匹配失败发生之前到
void main()
{
float x;
while(scanf("%f",&x) != 0)
printf("%f\n",x);
}
来自stdin的哪个输入会导致上述两种情况中的任何一种失败?
ctrl+d将使程序结束,但我想知道是否有任何特定的输入会导致此条件失败?
scanf
函数返回成功扫描的输入项目数
如果在第一次成功转换或匹配失败发生之前到达输入端,则返回值EOF
在您的程序中,它始终返回1。为了证明你看到了密码
while(scanf("%f",&x) != EOF)
#包括
main()
{
整数a;浮点x;
而((a=scanf(“%f”、&x))!=0)
printf(“%f%d\n”,x,a);
}
在此程序中,a
始终为1。可能是因为只有一个值
扫描成功。
a
如果扫描两个值,则得到2。查看linux手册页面:
scanf:这些函数返回成功匹配和分配的输入项的数量,可以少于提供的数量,如果早期匹配失败,甚至可以为零
因此,使用原始程序:
#include<stdio.h>
main()
{
int a;float x;
while((a=scanf("%f",&x)) != 0)
printf("%f %d\n",x,a);
}
这意味着,如果您输入任何不可转换的内容,将结束您的程序。尝试并输入任意字母,然后按enter键Ctrl+D或Ctrl+Z
以前已经提出过类似的问题:
提供一个可读取的文件,一旦到达文件末尾,循环将终止。记住使用输入重定向。从文件读取将返回EOF。但如何通过输入标准输入使该条件失效?这是我的问题按键盘上的ctrl+D(这将使两个都失败)或输入字符串(这将使第一个失败)。我认为您必须检查
scanf
的返回值。在您的情况下,仅返回%f
,并将准确返回1
。因此,您可以通过scanf(“%f”,&x)==1
进行检查。我知道上面的代码将始终返回1。我很想知道还有没有其他方法可以使这种情况失败。所以答案是否定的?输入任意字符。它将被终止。因为当成功扫描时,它只返回一个。获取字符(例如)时,它将失败。Ctrl+D或Ctrl+Z结束程序并不是导致条件失败的确切原因?我知道转换失败将返回0。所以对于用户,我们需要明确提到在输入有效值后输入一些字符,对吗?只是一个想法!!谢谢
void main()
{
float x;
while(scanf("%f",&x) != 0)
printf("%f\n",x);
}