fopen可以创建一个文件但不能在C中重新打开文件

时间:2018-02-28 18:52:58

标签: c fopen

我无法打开我刚刚使用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;
}

2 个答案:

答案 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,并且赋值表达式的结果是值分配的是c0被视为假 - 从不输入循环。

另请注意,之前您在为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