0

コードの何が問題なのかを理解するのに苦労しています。私の仕事は、シーザー暗号をファイルに書き込むことです。そこにあるはずのない追加のシンボルが表示されることがありますが (時々)、それ以外はうまく機能しています。これがhttp://puu.sh/kC04F/2fc1bbd048.jpgのようなもの です。コードは次のとおりです。よろしくお願いします^^

#include<iostream>
#include<conio.h>
#include<cstring>
#include<stdio.h>
using namespace std;
int main ()
{
  char ch[20];
  char conv[20];
  int i;
  cout<<"Enter a word "<<endl;
  gets(ch); 
  int otm;
  cout<<"Enter shift "<<endl;
  cin>>otm;
  int c=strlen(ch);

  for(i=0; i<c; i++)
  {
    conv[i]=ch[i]+otm%26;
  }

  for(i=0; i<c; i++)
  {
      cout<<conv[i];
  }

  FILE *stream;
  char ime[]="probe.txt";

  stream=fopen(ime, "w");
  fwrite(conv, strlen(conv), 1, stream);
  fseek (stream, 0, SEEK_SET);

  cout<<endl;
  fflush(stream);
  fclose(stream);


  system ("pause");
  return 0;
}
4

1 に答える 1

1

問題はchar conv[20];ゴミが含まれていることです。次に、変換でそれを埋めますが、文字列の終わりを示すために null ターミネータを最後に追加することはありません。 coutガベージを別の方法で処理しているように見えるためfwrite、ファイルへの出力と画面上の出力に違いが生じます。この変更を修正するには:

for (i = 0; i<c; i++)
{
    conv[i] = ch[i] + otm % 26;
}

for (i = 0; i<c; i++)
{
    conv[i] = ch[i] + otm % 26;
}
conv[c] = '\0';
于 2015-10-07T19:43:50.547 に答える