我正在尝试从文件中读取文本(应该很容易吧?)。据我所知,语法应类似于
FILE *filename;
filename = fopen("filename.txt", "r"); /*when file is the same
folder of the .exe*/
下面是我的代码。当我运行它时,我只会得到“错误”,这是发生错误时我想要的提示。我在这里包括了一个全局结构声明,因为它实际上是代码中的另一件事,尽管我很肯定它不会对打开文件造成任何问题。
#include <stdio.h>
#include <stdlib.h>
struct list {
char subject[20];
char prof_name[20];
char prof_surname[20];
char period[20];
int credits;
int pass_rate;
};
int main()
{
struct list data[80];
FILE *prof;
prof = fopen("professor.txt", "r");
if (prof == NULL) {
fprintf(stderr, "Error");
exit(EXIT_FAILURE);
}
return 0;
}
该文件具有正确的名称和扩展名,与.exe在同一文件夹中(我也尝试过使用该地址,但仍会执行相同操作)。我觉得如果再看一分钟代码,我就会发疯。我一定错过了一些东西
答案 0 :(得分:2)
关于注释“当文件是.exe的相同文件夹时”,这是不正确的。
相反,相对路径(如您的professor.txt
)是相对于进程当前工作目录的相对路径。可能与.exe
文件的位置不同。
我的猜测是,您在Visual Studio(或其他IDE)中运行,它将可执行文件放在子目录中。但是,运行时的工作目录通常是项目的根目录。
因此,要么进入项目设置并在运行程序时将工作目录更改为文件所在的目录,要么将文件移至实际的工作目录。
您可以使用_getcwd
函数来获取流程工作目录,以验证它是否是您认为的样子。