双精度数作为混乱的数字返回

时间:2019-07-08 14:59:51

标签: c

一般来说,这是编程的新手,它使用VisualStudio在C中创建一个程序,该程序会从用户处获取一个浮点,然后返回是否为负数,然后将其作为整数获取,最后返回整数的第一位。代码看起来像这样:

double extractDigit1(x){
     double userFloatValue = x;
     (userFloatValue >= 0) ? printf(" %f is a positive value.", userFloatValue) :
                             printf(" %f is a negative value.", userFloatValue);
}

int main(){
     double userValue;
     scanf_s("%lf", &userValue);
     extractDigit1(userValue);
}

输入1234.345可让我:

"1202590843.000000 is a positive value."

代替:

"1234.345 is a positive value."

2 个答案:

答案 0 :(得分:3)

根本问题是

  • double extractDigit1(x)不是正确的函数原型,应为double extractDigit1(double x)

    根据您的写法,x被认为是int,与其余代码不兼容。

请注意

  • 您的函数不返回任何内容,而其原型说明了

    这是一种不确定的行为,可能导致任何后果

最后

  • 您使用scanf_s函数,其功能几乎与scanf类似,但处理字符串的方式不同,并且移植性较差(请参见Difference between scanf and scanf_s)。我建议您不要使用它。

更正的代码:

#include <stdio.h>

double extractDigit1(double x){
    double userFloatValue = x;
    (userFloatValue >= 0) ? 
        printf(" %f is a positive value.", userFloatValue) :
        printf(" %f is a negative value.", userFloatValue);
    return 0;
}

int main(){
   double userValue;
   scanf("%lf", &userValue);
   extractDigit1(userValue);
   return 0;
}

答案 1 :(得分:-2)

double userFloatValue = x;
int my_var = (int)userFloatValue ;
         (userFloatValue >= 0) ? printf(" %d is a positive value.",   my_var ) :
                                 printf(" %d is a negative value.",  my_var ) ;

使用scanf而不是scanf_s scanf(“%f”,&a);