2014-09-20 67 views
-2

我有一個數據文件
我怎樣才能fscanf()一個特定的類型?

12345678 
3.78 <<GPA 
3 
20.5 

87654321 
2.65 <<GPA 
2 
19.25 

08651234 
3.10 <<GPA 
1 
18.0 

11112222 
3.95 <<GPA 
4 
22.5 

22223234 
2.45 <<GPA 
3 
19.3333 

我應該怎麼才能做到fscanf()所有GPA值?
我必須使用一個函數0123'的值,我不能只是
fscanf(infile, "%lf%lf", &unsaved, &save);
請幫助我,謝謝!

+1

'的fscanf(infile中, 「%* LF%LF%* LF%* LF」,&save); ' – BLUEPIXY 2014-09-20 23:15:51

+0

使用'fgets'來讀取文件中的行,'sscanf'來轉換您關心的行上的值。 – user3386109 2014-09-20 23:16:14

回答

0

爲只讀GPAfscanf格式字符串附加參數賦值抑制,則需要類似fscanf (fp, "%*lf%lf%*s%*lf%*lf*", &save);格式字符串。您必須考慮數據塊中的刺痛字符,否則您將遇到輸入故障fscanf。在一個函數使用fscanf隔離GPA的一個例子是:

#include <stdio.h> 
#include <stdlib.h> 

void readgpa (char *filenm) 
{ 
    FILE *fp = fopen (filenm, "r"); 
    if (!fp) { 
     fprintf (stderr, "\n Error, invalid filename '%s'\n\n", filenm); 
     exit (1); 
    } 

    int cnt = 0; 
    double save; 

    while (fscanf (fp, "%*lf%lf%*s%*lf%*lf*", &save) != -1) 
    { 
     cnt++; 
     printf (" line: %d GPA: %.2f\n", cnt, save); 
    } 

    if (fp) fclose (fp); 

} 

int main (int argc, char **argv) { 

    if (argc < 2) { 
     fprintf (stderr, "\n Error, insufficient input. Usage: %s filename\n\n", argv[0]); 
     return 1; 
    } 

    readgpa (argv[1]); 

    return 0; 
} 

輸出:

$ ./bin/gpa dat/gpa.dat 
line: 1 GPA: 3.78 
line: 2 GPA: 2.65 
line: 3 GPA: 3.10 
line: 4 GPA: 3.95 
line: 5 GPA: 2.45