2016-10-18 10 views
1

2ファイルのコンテンツを結合したいと思います。しかし私はそれをすることができません。2ファイルのコンテンツを結合する

私の出力は

Username: admin 
Password: password123 

Username: admin 
Password: password456 

Username: admin 
Password: password789 

Username: admin 
Password: [email protected] 

Username: admin123 
Password: password123 

のように見えるが、私は、この出力のようにやりたい

Username: admin 
Password: password123 

Username: admin 
Password: password456 

Username: admin 
Password: password789 

Username: admin 
Password: [email protected] 

Username: admin123 
Password: password123 

Username: admin123 
Password: password456 

Username: admin123 
Password: password789 

Username: admin123 
Password: [email protected] 

コードは以下のとおりである:あなたのループを再考する必要が

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

int main(void) 
{ 
    FILE *fpUser, *fpPass; 

    char user[100], pass[100]; 
    fpUser = fopen("username.txt","r"); 
    fpPass = fopen("password.txt","r"); 

    if (fpUser==NULL || fpPass==NULL) 
    { 
      printf("Username or Password File Cannot Found\n"); 
      exit(0); 
    } else { 
     while(fgets(user , 100 , fpUser) != NULL) 
     { 
      do 
      { 
       printf("Username: %s\n", user); 
       printf("Password: %s\n", pass); 
      } 
      while (fgets(pass , 100 , fpPass) != NULL);  
     } 

    } 

    return 0; 
} 
+0

内部ループは、ファイルから 'pass'を読み込む前に' pass'を印刷しているので、全く動作しません。内側のループは外側のループと同様に 'while'ループである必要があります。次に、内側のループが終了した後にファイルを '巻き戻す '必要があります。 – user3386109

+0

「2つのファイルからコンテンツを結合する」とはどういう意味ですか?あなたは1つを他のものに置きたいのですか? – 4386427

+0

本当にあなたの2つのファイルが何を含んでいるかによって異なります。どのようにあなたの読書を検証する予定ですか?行ごとに? (たとえば、1行目のファイル1は2行目のファイル2になります)余分な空白行は可能ですか? –

答えて

2

を。私はあなたがこのような何かをしたいと思う:新しいループと

password 
badmin 
[email protected] 
[email protected]@dles 
p1ckL3z 
sandW1ch3z 

プログラムの出力:

admin 
admin 
admin123 
admin123 
user1 
user2 
user3 

password.txt

Username: admin 
Password: password 

Username: admin 
Password: badmin 

Username: admin123 
Password: [email protected] 

Username: admin123 
Password: [email protected]@dles 

Username: user1 
Password: p1ckL3z 

Username: user2 
Password: sandW1ch3z 
ファイル username.txt考える

while((fgets(user , 100 , fpUser) != NULL) && 
       (fgets(pass , 100 , fpPass) != NULL)) 
     { 
      printf("Username: %s", user); 
      printf("Password: %s\n", pass); 
     } 
    } 

    return 0; 
} 

fgets()が改行を読み込んでそれを保持するので、私はprintf()への最初の呼び出しから改行を削除したことに注意してください。また、パスワードやユーザー名が不足したときにプログラムが停止することにも注意してください。

更新:

@デビッドC.ランキンは、コードが入力で空白行を処理する必要があることを示唆しました。これは本当に良いアイデアですが、それが言及される前に私の心の中でぼんやりとしていましたが、私は本当にその考えを楽しむには怠惰でした。これを実現するプログラム全体を修正したものです。私はfgets()への呼び出しから戻り値を受け取る宣言にcharへの2つのポインタを追加しました。ここで

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

int main(void) { 
    FILE *fpUser, *fpPass; 

    char *isUser, *isPass; 
    char user[100], pass[100]; 
    fpUser = fopen("username.txt","r"); 
    fpPass = fopen("password.txt","r"); 

    if (fpUser==NULL || fpPass==NULL) 
    { 
     printf("Username or Password File Cannot Found\n"); 
     exit(0); 
    } else do { 
      while ((isUser = fgets(user, 100, fpUser)) != NULL && 
        user[0] == '\n') 
       continue; 
      while ((isPass = fgets(pass, 100, fpPass)) != NULL && 
        pass[0] == '\n') 
       continue; 
      if (isUser && isPass) { 
       printf("Username: %s", user); 
       printf("Password: %s\n", pass); 
      } 
     } while (isUser && isPass); 

    return 0; 
} 

ファイルusername.txtです:

admin 
admin 




admin123 
admin123 
user1 
user2 






user3 

password.txt

password 
badmin 

[email protected] 
[email protected]@dles 
p1ckL3z 


sandW1ch3z 
anotherpass 
longforapass 

あなたがここでそれを見ることはできませんが、password.txtファイルが空白行で開始。新しい出力は次のとおりです。

Username: admin 
Password: password 

Username: admin 
Password: badmin 

Username: admin123 
Password: [email protected] 

Username: admin123 
Password: [email protected]@dles 

Username: user1 
Password: p1ckL3z 

Username: user2 
Password: sandW1ch3z 

Username: user3 
Password: anotherpass 
+0

おそらく 'if(* user!= '\ n' && * pass!= '\ n'){ /} '? –

+0

@ DavidC.Rankin--良い点。私の答えの更新を見てください。私の解決策が一番きれいであるとは思えません。別のアイデアがあるかもしれませんか? –

+0

ええ、それははるかに良いです。あなたは空白の上を前方にスキャンすると同様に動作します。それはこのQのためにそれを行うべきです。 –

0

ポストマスターが終了します。私は内側のループでrewind()を使用している答えが見つかりました。

関連する問題