2014-10-20 38 views
-2

这是我的C++代码。你如何显示浮点数?

#include <iostream> 
#include <string.h> 
#include <ctype.h> 
#include <stdio.h> 

int main() 
{ 
    FILE *f1; 
    char c; 
    int num[100], tokenvalue = 0, i = 0, j = 0; 
    f1 = fopen("test.txt", "r"); 
    while ((c = getc(f1)) != EOF) 
    { 
     if (isdigit(c)) 
     { 
      tokenvalue = c - '0'; 
      c = getc(f1); 
      while (isdigit(c)) 
      { 
       tokenvalue = tokenvalue * 10 + (c - '0'); 
       c = getc(f1); 
      } 
      num[i++] = tokenvalue; 
      ungetc(c, f1); 
     } 
    } 

    printf("\nThe no's in the program are\n"); 
    for (j = 0; j < i; j++) 
    { 
     printf("%d", num[j]); 
     printf("\n"); 
    } 
    int z; 
    scanf("%d", &z); 
    return 0; 
} 

我test.txt的输入文件有:

Name: Md. Jakir Hossin 
Age: 23 

Name: Shafi Mahmud 
Age: 18.5 

Name: Asmaul Husna 
Age: 28 

Name: Md. Jahirul Haque 
Age: 30.4 

输出:

[输出] [1]

该程序显示任何整型数字,但不显示浮点数。你如何显示浮点数?

+0

用户'%f'作为格式说明符 – 2014-10-20 04:10:34

+4

为什么在C++代码中使用stdio(标记为这样)。它是C代码 – 2014-10-20 04:11:01

+0

@EdHeal还有数百人不知道区别/认为C++是更高版本的c:D – 2014-10-20 04:12:19

回答

-1

C++:

cout << num[j] << endl; 

C:

printf("%f", 1.23f); 

如果数或变量是:

printf("%f \n", num[j]); 
+0

要么你必须做类型转换,要么声明为float – 2014-10-20 04:14:05

+4

但是声明是'int num [100]',所以C版本不起作用,并且实际上会调用未定义的行为。 – 2014-10-20 04:14:40

0

要显示的浮子数量很好地完成不是float,浇铸将工作:

int num[100]; 
.... 
printf("%f", (float) num[j]); 

注:传递给...功能可变参数值一样printf()的转换成值double

然而OP的真正问题似乎是需要从文件中读取数字作为浮点值。

// int num[100]; 
float num[100]; 
... 
// Age: 18.5 
char buf[50]; 
if (fgets(buf, sizeof buf, f1) == NULL) Handle_IOError_or_EOF(); 
if (sscanf(buf, "Age:%f", buf, &num[j]) != 1) Handle_UnexpectedData(); 
printf("Age: %.1f\n", num[j]);