2017-02-16 6 views
-3

私はmyfile.txtというテキストファイルを読んで、1,2,4,6行をeven.txtというテキストファイルにコピーし、1,3,5行をodd.txtにコピーしようとしています。私はプログラミングが初めてで、これはおそらく非常に間違っています。どんな助けもありがとう。テキストファイルを分離する

int main() 
{ 
    FILE *fp; 
    FILE *feven; 
    FILE *fodd; 
    int lines = 0; 

    fp = fopen("myfile.txt","r"); 
    if (fp ==NULL) { 
    printf("Cannot open file.\n"); 
    exit(1); 
    } 

    feven = fopen("even.txt","w"); 
    if (feven ==NULL) { 
    printf("Cannot open file.\n"); 
    exit(1); 
    } 

    fodd = fopen("odd.txt","w"); 
    if (fodd ==NULL) { 
    printf("Cannot open file.\n"); 
    exit(1); 
    } 

    while (fscanf(fp, "%s") != EOF) { 
    lines++; 
    if (lines%2=0) 
    {fprintf(feven,"%s \n");} 
    else 
    {fprintf(fodd,"%s \n",);} 
    } 
}//end program 
+1

「すべてのヘルプを」。特定の質問をしてください。表示されているようにコードに問題がある場合は、それらの問題(入力、予想される動作、実際の動作)を記述してください。また、ヘルプを探す前に、あなた自身で問題をデバッグするために何をしましたか? – kaylum

+0

'fscanf'と' fprintf'のマニュアルページを読むことをお勧めします。あなたは彼らに正しいパラメータを与えていません。 'fprintf(fodd、"%s \ n "、)'は何をすると思いますか?その呼び出しはどこからデータを取得するのですか?それはコンパイルされますか? – kaylum

+0

'fscanf(fp、"%s "、...)'を使って行を読み込もうとすると、行ではなく単語を読み込みます。 'fgets()'を使って行を読み込み、それが返す文字列に改行を保持していることに注意してください。おそらく、出力の行末にスペースを入れてはいけません。実際には、 'fgets()'を呼び出すために 'fputs()'を使うべきでしょう。 –

答えて

1

あなたが行を格納するための余地を持っていない、私はfgets(あなたのコードはFILEへのポインタの配列を使用して単純化することができる旨の通知)をお勧め:

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

int main(void) 
{ 
    FILE *file; 
    FILE *out[2]; 
    char str[1024]; 
    int isodd = 1; 

    file = fopen("myfile.txt", "r"); 
    if (file == NULL) { 
     perror("fopen"); 
     exit(EXIT_FAILURE); 
    } 
    out[0] = fopen("even.txt", "w"); 
    if (out[0] == NULL) { 
     perror("fopen"); 
     exit(EXIT_FAILURE); 
    } 
    out[1] = fopen("odd.txt", "w"); 
    if (out[1] == NULL) { 
     perror("fopen"); 
     exit(EXIT_FAILURE); 
    } 
    while (fgets(str, sizeof str, file) != NULL) { 
     fprintf(out[isodd], "%s", str); 
     isodd = !isodd; 
    } 
    return 0; 
} 
+1

'fgets'にコメントしました。 –