C 如何通过标准输入使以下条件失效

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函数返回成功扫描的输入项目数 如果在第一次成功转换或匹配失败发生之前到

上面的代码从stdin获取输入并不断重复,但是如何结束呢?我知道scanf可以返回EOF,所以如果我添加一个类似

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); 
}