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

问题描述 投票:0回答:2

我无法打开我刚刚使用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;
}
c fopen
2个回答
4
投票
myOpenFile = fopen("name.txt", "r") == NULL

将会

(myOpenFile = fopen("name.txt", "r")) == NULL

否则你将myOpenFile的结果分配给==,这是01。记住==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被认为是假的 - 从不输入循环。

另请注意,之前您在分配c时打印了EOF的值。这不是你的意图。更正的代码应该如上所示。


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

© www.soinside.com 2019 - 2024. All rights reserved.