使用C中的if语句请求输入两次

使用C中的if语句请求输入两次,c,if-statement,scanf,C,If Statement,Scanf,我的代码要求输入两次。我知道这是因为有两个scanf()调用,但我不知道如何摆脱其中一个调用,使其只请求输入一次。我需要检查,以确保输入是一个数字,如果它是一个数字,然后确保它在0和90之间 printf("Hello! Let's compute the escape velocity of a baseball!\n"); printf("Please supply the angle of travel, in degrees: "); scanf(" %lf", &angleTr

我的代码要求输入两次。我知道这是因为有两个
scanf()
调用,但我不知道如何摆脱其中一个调用,使其只请求输入一次。我需要检查,以确保输入是一个数字,如果它是一个数字,然后确保它在0和90之间

printf("Hello! Let's compute the escape velocity of a baseball!\n");
printf("Please supply the angle of travel, in degrees: ");
scanf(" %lf", &angleTravel);
    if (scanf(" %lf", &angleTravel) != 1){
        printf("Please enter a number.");
        return(0);}
    if ((angleTravel > 90) || (angleTravel < 0)){ 
        printf("Please try again with an angle between 0 and 90.\n");
        return(0);}
radianTravel = angleTravel * (M_PI / 180.0); 
printf("The angle you supplied is %lf degrees, or %lf radians\n",       angleTravel, radianTravel);
printf(“你好!让我们计算棒球的逃逸速度!\n”);
printf(“请提供行程角度,单位为度:”);
扫描频率(“%lf”和角度行程);
如果(扫描频率(“%lf”,&angleTravel)!=1){
printf(“请输入一个数字”);
返回(0);}
如果((角度行程>90)| |(角度行程<0)){
printf(“请以0到90之间的角度重试。\n”);
返回(0);}
弧度行程=角度行程*(M_PI/180.0);
printf(“您提供的角度为%lf度或%lf弧度”\n“,角度行程,弧度行程);

您可以引入变量
matches
来存储
scanf
的结果:

int matches = scanf(" %lf", &angleTravel);
然后在if子句的条件中检查是否匹配

if (matches != 1){

您可以删除第一条scanf语句。您不需要第一个scanf语句

当您像这样运行代码时

if(f(x)==1)
{
    /*stuff*/
}

在进行比较之前,代码将执行函数f(或者在您的情况下,scanf)。

return
上的注释似乎有些说教和不恰当。这实际上与OP的问题无关,是否将括号与
return
连用实际上只是风格/观点的问题。@Caleb从未考虑过“风格”部分。。。我只是想到她/他可能会被教使用偏执狂,而不知道它的背景。将相应地更新。如果
匹配==EOF
,则再次询问没有多大用处。建议返回
匹配项