我无法打开我刚刚使用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;
}
答案 0 :(得分:4)
myOpenFile = fopen("name.txt", "r") == NULL
将是
(myOpenFile = fopen("name.txt", "r")) == NULL
否则,您将[{1}}的结果分配给myOpenFile
==
或0
。请注意,1
的{{3}}不是==
。因此,在将其分配给=
之前进行比较。
对您而言可能看似微不足道的另一件重要事情是 - myOpenFile
的返回值为fgetc
而不是int
。因此,char
将在此处正确使用 - 而不是int c
。
您的char c
未初始化 - 使用某个值进行初始化,然后进行比较。正如所建议的那样(melpomene)
c
之前您基本上否定了值while ((c = fgetc(myOpenFile))!=EOF)
{
printf("%c", c);
}
(EOF),它是-1
,并且0
值已分配给0
,并且赋值表达式的结果是值分配的是c
且0
被视为假 - 从不输入循环。
另请注意,之前您在为0
分配c
时打印了EOF
的值。这不是你的意图。更正的代码应如上所示。
答案 1 :(得分:2)
您的代码中有错字
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
。