无法找出凯撒密码的问题C++

Can't figure out an issue with Caesar Cipher in C++

本文关键字:问题 C++ 密码 凯撒      更新时间:2023-10-16

我有一些麻烦弄清楚问题是什么与我的代码。我的任务是把凯撒密码写在一个文件里。它似乎显示了不应该在那里的额外符号(不时),但它在其他方面工作良好。这是它看起来像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;
}

问题是char conv[20];包含垃圾。然后用转换填充它,但永远不要在末尾添加空终止符来表示字符串的结束。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] = '';