我无法打开我刚刚用fopen()
创建的文件,我在Linux和Windows上都尝试了这段代码。我还使用完整路径尝试了这段代码。
#include<stdio.h>
int main() {
char c;
FILE *myFile = fopen("name.txt", "w"); //file name.txt created
fprintf(myFile, "My name is %s", "Adam"); //text saved
fclose(myFile); //file closed
FILE *myOpenFile;
if(myOpenFile = fopen("name.txt", "r") == NULL);
{
printf("No such file\n"); //no such file is executed
return 0;
}
while (c=!EOF)
{
c = fgetc(myOpenFile);
printf("%c", c);
}
fclose(myOpenFile);
return 0;
}
发布于 2018-02-28 18:55:12
myOpenFile = fopen("name.txt", "r") == NULL
将会是
(myOpenFile = fopen("name.txt", "r")) == NULL
否则,您将把==
的结果赋给myOpenFile
,即0
或1
。请记住,==
具有higher precedence而不是=
。因此,在将其分配给myOpenFile
之前,它会进行比较。
对你来说,另一件重要的事情是-- fgetc
的返回值是int
,而不是char
。所以在这里int c
是正确的用法,而不是char c
。
您的c
未初始化-使用某个值进行初始化,然后进行比较。正如所建议的那样,它将是(melpomene)
while ((c = fgetc(myOpenFile))!=EOF)
{
printf("%c", c);
}
前面您基本上将值-1
(EOF)求反,它是0
,该0
值被赋值给c
,赋值表达式的结果是赋值的值为0
,并且该0
被认为是false -循环永远不会进入。
还要注意,前面在将EOF
赋值给c
时输出了它的值。这不是你的意图。修正后的代码应该类似于上面所示的代码。
发布于 2018-02-28 19:03:58
你的代码中有一个拼写错误
if(myOpenFile = fopen("name.txt", "r") == NULL);
{
printf("No such file\n"); //no such file is executed
return 0;
}
第一行末尾的;
生成一个什么也不做的代码块。然后,将始终执行以下代码块。
旁白:你使用了错误的变量类型。
char c;
应该是
int c;
正如手册页所述。不要担心
printf("%c", c);
因为char
无论如何都会被提升为int
。
https://stackoverflow.com/questions/49036607
复制