【发布时间】:2018-01-23 11:24:22
【问题描述】:
我编写了一个简单的程序来将文本从 ASCII 文件输出到命令行,但我得到了垃圾字符。这是我的代码的相关部分:
void main(int argc, char *argv[]) {
char *filename;
... [filename is defined here as the command-line argument]
FILE *fptr = fopen(filename, "r");
if (fptr == NULL) {
printf("Error: no such file %s!\n", filename);
exit(1);
} else {
int c;
while(c = fgetc(fptr) != EOF) {
putchar(c);
}
fclose(fptr);
}
}
当我使用包含一行文本的简单测试文件运行此代码时,我得到一堆垃圾符号。
【问题讨论】:
-
你的语句相当于
while( c=(fgetc(fptr) != EOF)),所以你需要像while( (c=fgetc(fptr)) != EOF )这样的括号 -
while (c=fgetc(fptr) != EOF ) {: 你不关心=和!=的优先级。试试这个:while ((c=fgetc(fptr)) != EOF) {. -
...否则
c将始终为 1 并且一次(最终)为 0。 -
所以由于我的语法不好,指针永远不会递增到下一个字符?我懂了。但我想知道为什么这不会导致无限循环。 *编辑:不,我解释错了。我猜 fgetc 使用它自己的内部指针来到达文件末尾而不修改参数指针,并且 int c 总是评估为 1
-
再次,复合表达式出错了:( 编写简单的代码,编写易于测试的代码,编写易于调试的代码。然后您可能会得到工作代码。