Неожиданная ошибка при чтении из текстового файла в C - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь прочитать текст из файла (должно быть довольно легко, верно?). Насколько я помню, синтаксис должен выглядеть примерно так:

FILE *filename;
filename = fopen("filename.txt", "r"); /*when file is the same 
                                        folder of the .exe*/

Ниже мой код. Когда я запускаю его, я просто получаю «Error», то есть подсказку, которую я хотел получить в случае ошибки. Я включил здесь глобальное объявление структуры, потому что это буквально единственная вещь в коде, хотя я уверен, что это не вызывает никаких проблем с открытием файла.

#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 (я также пробовал с адресом, он все еще делает то же самое). Я чувствую, что сойду с ума, если посмотрю на код хотя бы еще на минуту. Там должно быть что-то, что я пропустил

1 Ответ

0 голосов
/ 05 января 2019

Относительно комментария "когда файл находится в той же папке .exe", это неверно.

Вместо этого относительные пути (например, professor.txt) являются относительными из текущего рабочего каталога процесса. Который может сильно отличаться от местоположения файла .exe.

My думаю, означает, что вы работаете внутри Visual Studio (или другой IDE), которая помещает исполняемые файлы в подкаталог. Однако рабочим каталогом при запуске обычно является корневой каталог проекта.

Так что либо перейдите в настройки проекта и измените рабочий каталог при запуске программы в каталог, где расположен файл, либо переместите файл в фактический рабочий каталог.


Вы можете использовать функцию _getcwd, чтобы получить рабочий каталог процесса и убедиться, что это именно то, что вы считаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...