我有一个函数用于通过用前面的三个字母替换每个字符来加密文件,但是我对输出有一些问题。
void file_encrypt(char * filename)
{
FILE *file1 = fopen(filename, "r");
char c;
if(file1 != NULL) {
while(fscanf(file1, "%c", &c) == 1) {
c = fgetc(file1);
if(c == 'a' || c == 'b' || c == 'c' || c == ' ') {
switch(c) {
case 'a': putchar('x');
break;
case 'b': putchar('y');
break;
case 'c': putchar('z');
break;
case ' ': putchar(' ');
break;
}
}
else
printf("%c", c - 3);
}
}
}
我的输入文件是一个包含aaaaa bbbbb ccccc def
作为简单测试的文本文件,所以我的输出应该为xxxxx yyyyy zzzzz abc
,而不是它xx yy zz b
我已尝试搞乱while循环条件(将其设为!= EOF
而不是== 1
,将fscanf
更改为fgetc
检查{} {1}}语句先前已c = fgetc(file1)
将char分配给c的地址,结果相同。
现在看着它我可以看到它正在读或写所有其他角色,包括跳过第一个角色。任何人都知道为什么会这样?
答案 0 :(得分:0)
在循环开始时,您从文件中读取两次,忽略读取的第一个值(进入c
,fscanf()
):
while(fscanf(file1, "%c", &c) == 1) {
c = fgetc(file1);
您可能希望将其简化为只读一次:
int c; // EOF is not a 'char' value
while ((c = fgetc(file1)) != EOF) {