我需要在 file.txt 中将每个字母字符替换为特定字符。 我写了以下代码片段:
FILE *file;
char c;
file = fopen(filename, "r+");
char chars[] = { 'a', 'b', 'c', 'd', 'e',
'f', 'g', 'k', 'l', 'm',
'n', 'o', 'p', 'r', 's',
't', 'u', 'v', 'w', 'x',
'y', 'z'};
while ((c = getc(file)) != EOF) {
if (c == 'd') {
continue;
}
if (strchr(chars, c) != NULL) {
fseek(file, 0, SEEK_CUR);
fputc((int)specific_char, file);
fflush(file);
}
}
fclose(file);
}
但由于某种原因,它会替换我文件中的所有字符。但我需要更换除了' 之外的所有内容。
我的代码有什么问题? (代码应该用C语言编写,而不是用C ++编写)
感谢大家。
答案 0 :(得分:2)
我看到几个错误:
对于初学者来说,你的" chars"数组使得strchr调用按预期工作:
char chars[] = { 'a', 'b', 'c', 'd', 'e',
'f', 'g', 'k', 'l', 'm',
'n', 'o', 'p', 'r', 's',
't', 'u', 'v', 'w', 'x',
'y', 'z', '\0'};
您可以使用字符串声明轻松替换上面的数组。并且您不需要显式的null char,因为它隐含地是字符串文字的一部分。
char* chars= "abcdefghijklmnopqrstuvwxyz";
另外,这句话:
fseek(file, 0, SEEK_CUR);
是一个禁止操作,并没有做任何事情。我想你想要将文件指针向后设置一个char。因此,这就是你想要的:
fseek(file, -1, SEEK_CUR);
不需要fflush
来电,只会影响效果。可能对调试很有用,但您可能不需要它。