2016-11-17 88 views
0

我希望我的函数能够将字符串转换为双精度型,但如果我键入例如'22.4',它将输出'22'。我怎样才能得到它输出一个双?(USING fgets)我已经阅读了其他问题,答案说使用sscanf,但有没有办法使用fgets?字符串转换为整数而不是双倍

double getDouble(char message[]){ 

double val; 
double var = 0.0; 
char input[80]; 

do{ 
    printf("%s\n", message); 
    fgets(input, 80, stdin); 

    if (input[strlen(input)-1] == '\n'){ 
     input[strlen(input)-1] = '\0'; 
    } 
    val = atof(input); 

    if (val != 0.0){ 
     var = 1.0; 
    } 
    else{ 
     printf("Error. Please try again.(Only entering numbers is valid)\n"); 
    } 
}while(var == 0.0); 
printf("The result is: %f\n", val); 

return val; 


} 
+0

尝试'%.1f',而不是'%F'。 – RoadRunner

+0

仍然是相同的结果 –

+0

你想要转换什么字符串? – RoadRunner

回答

1

这是一个工作示例。

一些修改:

  • 使用near_equal()功能,作为双打的测试平等是很危险的。
  • 而不是使用双标志,如var = 0.0,为什么不只是使用int
  • 检查返回值fgets总是一个好主意。

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <math.h> 
    
    #define BUFFSIZE 80 
    #define EPSILON 1e-8 
    
    double getDouble(char message[]); 
    int double_equal(double a, double b); 
    
    int 
    main(void) { 
        double num; 
    
        num = getDouble("Enter a real number: "); 
    
        printf("The result is: %.1f\n", num); 
    
        printf("The number you entered was %g\n", num); 
    
        return 0; 
    } 
    
    double 
    getDouble(char message[]) { 
        double val; 
        char input[BUFFSIZE]; 
        int found = 0; 
    
        do { 
         printf("%s\n", message); 
         if (fgets(input, BUFFSIZE, stdin) != NULL) { 
          if (input[strlen(input)-1] == '\n'){ 
           input[strlen(input)-1] = '\0'; 
          } 
          val = atof(input); 
    
          if (!double_equal(val, 0.0)) { 
           found = 1; 
          } else { 
           printf("Error. Please try again.(Only entering numbers is valid)\n"); 
          } 
         } 
        } while (found == 0); 
    
        return val; 
    } 
    
    int 
    double_equal(double a, double b) { 
        return fabs(a-b) < EPSILON; 
    } 
    
+0

非常感谢你的尝试,但它仍然不能用于某些奇怪的原因 –

+0

什么错误你得到@约翰史密斯? – RoadRunner

+0

有没有错误它运行良好,只是如果我把任何小数将它舍入到整数 –