2017-02-10 59 views
1

我有一個輸入文件,格式如下:閱讀和編寫C文件是不是給正確的輸出

CGF 0.89402944我-628131597 CUF 0.8987373 CFCNF 0.046165943 CKI -898862630˚F0.20252013我-1074797352˚F0.11681563 ˚F0.88717264˚F0.7676326 我-817826750

的目標是創建3個新的文件。一個文件將包含字符,另一個將包含整數,第三個將包含浮點數。

我應該通過第一次讀取第一個字符來讀取輸入文件。這個角色會告訴我下一個字符串是什麼。因此,例如,第一個字符是C,這意味着下一個字符序列將是Char。然後我讀下一個字符,這是一個F,這意味着下一個字符序列將是一個浮點數,依此類推。

#include<stdio.h> 

int main(int arg, char * argv[]){ 
FILE * intsFile = fopen("ints.txt", "w"); 
FILE * charsFile = fopen("chars.txt", "w"); 
FILE * floatsFile = fopen("floats.txt", "w"); 

FILE * inputFile = fopen("input.txt", "r"); 

char characters; 
int integers; 
float floats; 

char flag; 

while(fscanf(inputFile, "%c", &flag) != EOF){ 
    if (flag == 'C'){ 
     fscanf(inputFile, "%c", &characters); 
     fprintf(charsFile, "%c ", characters); 
    } 
    if (flag == 'F'){ 
     fscanf(inputFile, "%i", &integers); 
     fscanf(inputFile, "%i ", integers); 
    } 
    if (flag == 'I'){ 
     fscanf(inputFile, "%f", &floats); 
     fscanf(inputFile, "%f ", floats); 
    } 
} 

return 0; 
} 

但是,我的輸出很奇怪。我的chars.txt文件中沒有任何內容,我的ints文件中沒有任何內容,並且我的浮動文件包含重複值。這裏發生了什麼?

+4

在閱讀一個「C」,下一個字符是下面的空間,而不是你想讀的字符。嘗試'fscanf(inputFile,「%c」,&characters);'(注意'%c'前面的空格)在掃描字符之前跳過空格。 – Dmitri

+0

將fscanf替換爲'f'和'I'的fprintf。檢查是否需要輸出文件的「wt」標誌才能使用「文本」模式。 – DraganS

+1

你寫的I和F是不正確的剪切和粘貼,他們應該說'fprintf(floatsFile etc' – pm100

回答

1

你可以用下面的代碼解決這個問題:

#include<stdio.h> 

int main(int arg, char * argv[]){ 
    FILE * intsFile = fopen("ints.txt", "wt"); 
    FILE * charsFile = fopen("chars.txt", "wt"); 
    FILE * floatsFile = fopen("floats.txt", "wt"); 

    FILE * inputFile = fopen("input.txt", "r"); 

    char characters; 
    int integers; 
    float floats; 

    char flag; 

    while(fscanf(inputFile, "%c", &flag) != EOF){ 
     if (flag == 'C'){ 
      fscanf(inputFile, " %c", &characters); //fix 
      fprintf(charsFile, "%c ", characters); 
     } 
     if (flag == 'F'){ 
      fscanf(inputFile, "%f", &floats);//fix. wrong order with integer 
      fprintf(floatsFile, "%f ", floats);//fix 
     } 
     if (flag == 'I'){ 
      fscanf(inputFile, "%i", &integers);//fix. wrong order with float 
      fprintf(intsFile, "%i ", integers);//fix 
     } 
    } 

    fclose(intsFile);//fixes 
    fclose(charsFile); 
    fclose(floatsFile); 
    fclose(inputFile); 

    return 0; 
} 
+1

在掃描浮點數的格式字符串中不需要前導空格和整數......'%i'和'%f'已經跳過前導空格,只是'%c'需要 – Dmitri

+0

是的,我編輯了我的答案 – aldarel

+0

*你需要*'%c',雖然。 – Dmitri

1

您的循環有點不對,標誌== F正在讀取整數,並且整數和浮點讀取試圖寫入輸入文件。您的主要問題是字符和數字之間的空格,可以使用scanf爲「%c」來修復,如下所示。 這裏如果完整的工作代碼。 祝你好運:)

#include<stdio.h> 

int main(int arg, char * argv[]){ 
    FILE * intsFile = fopen("ints.txt", "w"); 
    FILE * charsFile = fopen("chars.txt", "w"); 
    FILE * floatsFile = fopen("floats.txt", "w"); 

    FILE * inputFile = fopen("input.txt", "r"); 

    char characters; 
    int integers; 
    float floats; 

    char space; 

    char flag; 

    while (fscanf(inputFile, "%c ", &flag) != EOF){ 
     if (flag == 'C'){ 

      fscanf(inputFile, "%c", &characters); 
      fprintf(charsFile, "%c ", characters); 

     } 
     if (flag == 'F'){ 
      fscanf(inputFile, "%f", &floats); 
      fprintf(floatsFile, "%f ", floats); 

     } 
     if (flag == 'I'){ 

      fscanf(inputFile, "%i", &integers); 
      fprintf(intsFile, "%i", integers); 

     } 
     fscanf(inputFile, "%c", &space); 
    } 

    return 0; 
}