为什么不能用"getc(f)) != EOF"直接比较呢?
Why can't use "getc(f)) != EOF" to compare directly?
我刚接触C语言,现在被这样的问题卡住了:为什么我用上面的表达式打印文件中的字符串会得到奇怪的结果?
情况是这样的:我有一个文件(data.txt),内容如下:
"Hello Everyone!!"
这是我的代码:
int main()
{
FILE *ptr = fopen("data.txt", "r");
if (ptr != NULL)
{
while (getc(ptr) != EOF) //print all contents in data.txt
printf("%c", getc(ptr));
}
else
printf("Open file failed.");
return 0;
}
执行结果为:
"el vroe!"
如果我先将 getc(ptr)
赋值给变量并进行比较,一切正常。
这两种方法有什么区别?
您在 while
的条件下提取第一个字符,然后在 printf
的条件下提取第二个字符。所以你在一个循环中只打印每个第二个字符。
如果需要,请执行以下操作:
int c;
while ((c = getc(ptr)) != EOF) {
printf("%c", c);
}
当然可以,但需要保存读取的字符。如果你不这样做,它就会丢失。
int main()
{
FILE *ptr = fopen("data.txt", "r");
if (ptr != NULL)
{
int c;
while ((c = getc(ptr)) != EOF) //print all contents in data.txt
printf("%c", c);
}
else
printf("Open file failed.");
return 0;
}
我刚接触C语言,现在被这样的问题卡住了:为什么我用上面的表达式打印文件中的字符串会得到奇怪的结果?
情况是这样的:我有一个文件(data.txt),内容如下:
"Hello Everyone!!"
这是我的代码:
int main()
{
FILE *ptr = fopen("data.txt", "r");
if (ptr != NULL)
{
while (getc(ptr) != EOF) //print all contents in data.txt
printf("%c", getc(ptr));
}
else
printf("Open file failed.");
return 0;
}
执行结果为:
"el vroe!"
如果我先将 getc(ptr)
赋值给变量并进行比较,一切正常。
这两种方法有什么区别?
您在 while
的条件下提取第一个字符,然后在 printf
的条件下提取第二个字符。所以你在一个循环中只打印每个第二个字符。
如果需要,请执行以下操作:
int c;
while ((c = getc(ptr)) != EOF) {
printf("%c", c);
}
当然可以,但需要保存读取的字符。如果你不这样做,它就会丢失。
int main()
{
FILE *ptr = fopen("data.txt", "r");
if (ptr != NULL)
{
int c;
while ((c = getc(ptr)) != EOF) //print all contents in data.txt
printf("%c", c);
}
else
printf("Open file failed.");
return 0;
}