在这个程序中,我在与程序相同的文件夹中使用名为“message”的文本文件上的简单替换密码。但是,当我运行它时,消息不会从“abcdefg”更改。我已经多次查看过代码,但是我没有看到问题,也许我只是C中的业余爱好者。非常感谢任何帮助。谢谢!
Ubuntu / Linux
答案 0 :(得分:0)
您的输入缓冲区永远不会被初始化。文件打开后添加:
fgets(file, MAXSIZE, File);
/* todo: check for error */
如果要覆盖该消息,请使用rewind(File)
。
完成后写一个换行符。
答案 1 :(得分:0)
在函数Encrypt()
中,打开文件后,您实际上没有将文件中的数据读入字符串file
。
您可以使用fgets()
从打开的文件中读取字符串file
,如
fgets(file, sizeof(file), File);
应该注意fgets()
会在尾随\n
中读取字符串。
在读取该行之后,文件指针将会前进,您需要在写入之前将其恢复到原始位置。
您可以将当前位置保存在变量中,从文件中读取并使用保存的值fseek()
将文件指针设置回来。
long currentPos=ftell(File);
fgets(file, MAXSIZE, File);
fseek(File, currentPos, 0);
此外,代替多个if
s,最好在else if
之后if
s。
这样,不需要检查匹配的if
之后的if
。
或者您可以取消所有烦人的if
并执行类似
char original[]="abcdefghijklmnoqrstuvwxyz";
char translation[]="FGZVABGXEJIKOVUYNPRCQTDSH";
for(j=0; translation[j]!='\0'; ++j)
{
if(file[i]==original[j])
{
file[i]=translation[j];
fputc(file[i], File);
}
}
使用system("pause")
并不是一种好习惯。请参阅here。