我编写了一个简单的程序,将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);
}
}当我使用一个包含一行文本的简单测试文件运行这段代码时,我会得到一堆垃圾符号。
发布于 2018-01-23 11:33:40
运算符!=优先于运算符=,因此您的变量c被分配给比较值(fgetc(fptr) != EOF)。要解决这个问题,您必须在任务周围加上括号:
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
int main(int argc, char ** argv)
{
assert(argc == 2);
FILE * fptr = fopen(argv[1], "r");
assert(fptr);
int c;
while((c = fgetc(fptr)) != EOF) putchar(c);
fclose(fptr);
return 0;
}(请注意,我断言这些值只是为了便于阅读。因为您的程序与用户交互,所以通过手动检查它们并打印特定的错误消息,您做得很好。)
https://stackoverflow.com/questions/48400532
复制相似问题