Попытка прочитать двойной от пользователя, получая ошибку сегментации - PullRequest
0 голосов
/ 27 января 2019

Я пишу функцию для получения ввода от пользователя, где она принимает только двойное значение, если введено неправильное значение, пользователь получает еще один шанс ввести двойное значение.Я получаю ошибку сегментации при вводе любых чисел.

double ReadDouble(){
   double *ret;
   char buff[100];
   printf("Please enter a double ");
   while(fgets(buff, sizeof(buff), stdin) != 0){
      if(sscanf(buff, "%lf", ret) == 1){
         return *ret;
      }
      else{
         printf("Invalid input, please enter a double ");
      }
   }
   return EOF;
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Не объявляйте ret указатель.Вместо этого объявите его как переменную и передайте его адрес scanf через &ret:

double ret;

if (sscanf(buff, "%lf", &ret) == 1) {
    return ret;
}

0 голосов
/ 27 января 2019
#include<stdlib.h>
#include<stdio.h>
double ReadDouble(){
   // you will return a double so you can directly declare it as a double and gives its address to the sscanf
   // if you declare it as double* you should allocate memory for it otherwise its not pointing to anything
   double ret;
   char buff[100];
   printf("Please enter a double ");

   while(fgets(buff, sizeof(buff), stdin) != 0){
     // passing the address of ret like this &ret to sscanf
      if(sscanf(buff, "%lf", &ret) == 1){
         return ret;
      }
      else{
         printf("Invalid input, please enter a double ");
      }
   }
   return EOF;
}

int main(){
printf("%lf ",ReadDouble());
}
...