Double возвращается как перемешанные числа - PullRequest
0 голосов
/ 08 июля 2019

Новое в программировании в целом, создание программы на C с VisualStudio, которая будет принимать плавающую точку от пользователя и возвращать ее, если она отрицательна или нет, затем получить ее как целое число и, наконец, вернуть первую цифру целого числа , Код выглядит примерно так:

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 ]

3 голосов
/ 08 июля 2019

Основная проблема

  • double extractDigit1(x) не является правильным прототипом функции, оно должно быть double extractDigit1(double x)

    Что бы вы ни написали, x считался int, что несовместимо с остальным кодом.

Обратите внимание, что

  • Ваши функции ничего не возвращают, тогда как их прототипы сообщают об этом

    Это неопределенное поведение, которое может привести к чему угодно

Наконец

  • Используется функция scanf_s, с которой она почти такая же, как scanf, но обрабатывает строки по-другому и менее переносима (см. Разница между scanf и 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;
}
0 голосов
/ 08 июля 2019
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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...