2016-11-24 17 views
0

ここに私のコードです。私はすべての文字(= p)をテキストファイルに書き込もうとしています。しかし、1文字しか書いていません。文字をCで文字列にまとめる方法

FILE *enc_vigenere = fopen(".../enc_vig.txt", "w"); 

unsigned int i, j, p = 0;   

for(i=0,j=0;i<strlen(text);i++, j++){ 
    if(j>=strlen(key)) { 
     j = 0; 
    } 
    if(text[i] >= 'a' && text[i] <= 'z') { 

     p = 97+(((toupper(text[i])-65)+(toupper(key[j])-65))%26); 

    } 

    else if(text[i] >= 'A' && text[i] <= 'Z') { 

     p = 65+(((toupper(text[i])-65)+(toupper(key[j])-97))%26); 
    } 

    printf("%c", p); 
    fprintf(enc_vigenere, "%c", p); 
    fclose(enc_vigenere); 
} 

} 

出力はここにある:

Text you want to Encrypt : bahar 
math 
naahd 

結果が真の「naahd」ですが、私は、テキストファイルを開いたとき、私はちょうど1文字を参照してください。 "n"私はどのようにそれを修正見つけることができませんでした。ありがとうございました。

+0

あなたはロックです!ありがとう。 <3 – misshyde

+0

あなたが投稿したコードがあなたがコンパイルしたコードだと確信していますか? '" .../enc_vig.txt "'は怪しいです(2ドットの代わりに3ドット)。 –

+0

それは動作します、私はちょうどここにそれを書いていますので、あまりにも長い:)もちろん3ドット:) – misshyde

答えて

1
  1. fclose(enc_vigenere);は、forのループ外にある必要があります。

  2. これはポータブルではありません。azが1つのブロックに表示されるとは限りません。 (Ditto A to Z。)また、65がAの値であるとは仮定できません。 (2)の代わりint islower(int c)int isupper(int c)を使用するため

。これらの機能は移植可能です。

+0

ありがとう、私はfclose(enc_vigenere);を移動し、forループのアウトして動作します。うーん、ありがとう。 – misshyde

+0

これは嬉しいことです。あまりにも2番目の点を忘れないでください。 –

+0

よろしいですか。 <3再び感謝します。 – misshyde

関連する問題