Как читать из текстового файла, который я сделал на C

Я новичок в C, я просто пытаюсь прочитать простой текстовый файл, который я создал в C. Я сделал этот файл, щелкнув новый -> пустой файл -> сохранив его в нужном месте, а затем добавив расширение файла (.txt) текстовый файл содержит образец доски судоку, а полное имя файла — sudokuchar.txt.

Код, который я должен прочитать из файла и распечатать его:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fpointer = fopen("sudokuchar.txt", "r");
    char input[100];
    while(fgets(input,100,fpointer))
    {
        printf("%s",input);
    }
    fclose(fpointer);
}

поэтому, когда я компилирую, программа ничего не печатает и возвращает -1. Я предполагаю, что что-то не так с файлом, который я пытаюсь прочитать?? если бы кто-то мог помочь, это было бы очень признательно.


person katDouglas    schedule 01.08.2016    source источник
comment
мое желаемое местоположение - если это желаемое местоположение также не является активным рабочим каталогом для вашего процесса при его запуске, размещенный код не сможет найти файл, и fopen вернет NULL. Не проверив это и довольно ошибочно предполагая, что это только что сработало, передача NULL в качестве указателя файла на fgets вызывает неопределенное поведение. Казалось бы, некоторые проверки ошибок и изменения конфигурации запуска во время выполнения в порядке.   -  person WhozCraig    schedule 01.08.2016
comment
так как мне сохранить файл в активный рабочий каталог?   -  person katDouglas    schedule 01.08.2016
comment
Также обратите внимание, что main () является функцией типа int и должна возвращать оболочке либо нулевое, либо положительное 8-битное значение при выходе (например, return 0;, если нет ошибок, 1-255 при ошибке). Также обратите внимание, что правильными объявлениями для main являются либо int main (void) {..., либо int main (int argc, char *argv[]) {... (вы увидите эквивалент char **argv вместо *argv[], и некоторые компиляторы принимают дополнительные непереносимые аргументы). Это не вызывает сбой чтения (наиболее вероятен сбой fopen), но правильное понимание основ помогает.   -  person David C. Rankin    schedule 02.08.2016


Ответы (2)


Всегда проверяйте возвращаемые значения fopen и других вызовов стандартной библиотеки. Скорее всего, вашего файла не существует. Вы можете создать удобное сообщение об ошибке, используя errno, просто не забудьте включить errno.h. В целом, ваш код должен работать, но вам НЕОБХОДИМО проверять возвращаемые значения вещей, потому что fopen возвращает NULL если он не может найти файл.

FILE *fpointer = fopen("sudokuchar.txt", "r");

if(fpointer == NULL) {
    fprintf(stderr, "Error: [Errno %d]: %s\n", 
            errno, strerror(errno));
    return 1;
}
person Ryan    schedule 01.08.2016

Желательно проверить, какой указатель файла возвращает. Если указатель файла возвращает 0 или NULL, то указатель файла не может указывать на указанное вами имя файла. Также вы можете использовать это

File *fp = fopen(file name with full path (i.e. /home/chex/read.txt),"r")

Проверить man fopen ФАЙЛ *fopen(const char *path, const char *mode);

person chex    schedule 02.08.2016