C 具有输入检查和重试选项的函数
我想知道如何在函数getFloats中实现输入检查,以便在用户输入不需要的输入(例如,一个单词或字母而不是一个数字)时,该函数打印一条消息,并向用户提供重试的选项,该函数退出,而不提供重试输入的选项。停止使用scanf并开始使用更好的输入法是否更专业C 具有输入检查和重试选项的函数,c,function,pass-by-reference,C,Function,Pass By Reference,我想知道如何在函数getFloats中实现输入检查,以便在用户输入不需要的输入(例如,一个单词或字母而不是一个数字)时,该函数打印一条消息,并向用户提供重试的选项,该函数退出,而不提供重试输入的选项。停止使用scanf并开始使用更好的输入法是否更专业 #include <stdio.h> void getFloats(float *a, float *b); int main() { float num1,num2; getFloats(&num
#include <stdio.h>
void getFloats(float *a, float *b);
int main()
{
float num1,num2;
getFloats(&num1,&num2);
printf("%.2f and %.2f\n", num1, num2);
return 0;
}
void getFloats(float *a, float *b)
{
puts("Enter numbers:");
scanf("%f", a);
if ( scanf("%f", a) == 0)
{
puts("try again");
scanf("%f", a);
}
else
{
scanf("%f", b);
}
}
#包括
void getFloats(float*a,float*b);
int main()
{
浮点数num1,num2;
获取浮点值(&num1和&num2);
printf(“%.2f和%.2f\n”,num1,num2);
返回0;
}
void getFloats(float*a,float*b)
{
放入(“输入数字:”);
scanf(“%f”,a);
如果(扫描频率(“%f”,a)==0)
{
放置(“重试”);
scanf(“%f”,a);
}
其他的
{
scanf(“%f”,b);
}
}
关于
scanf("%f", a);
if ( scanf("%f", a) == 0)
scanf()
#include <stdio.h>
#include <stdlib.h>
...
void getFloats(float *a, float *b)
{
puts("Enter numbers:");
if( scanf( "%f %f", a, b ) != 2 )
{
fprintf( stderr, "scanf failed\n" );
exit( EXIT_FAILURE );
}
}
#包括
#包括
...
void getFloats(float*a,float*b)
{
放入(“输入数字:”);
如果(扫描频率(“%f%f”,a,b)!=2)
{
fprintf(stderr,“scanf失败\n”);
退出(退出失败);
}
}
反复调用
scanf()
不太可能解决问题,因为问题仍然存在于stdin
流中我从不使用scanf()
。我更喜欢阅读整行代码,然后使用strtol()
和strtof()
函数族。在不检查返回值的情况下使用scanf
是不安全的。有关更多信息,请参见本页:上面我的链接评论中的页面还解释了何时适合使用scanf
,何时fgets
更好。@AndreasWenzel这篇文章是一个令人难以置信的建议。非常感谢。