Как прочитать и распечатать содержимое текстового файла в C - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь найти более простой способ чтения текстового файла. Я никогда раньше не программировал на Си, так что для меня это все ново. Моя цель - иметь возможность запускать мою программу и автоматически выводить ее на экран. То, что у меня есть ниже, работает, но я должен каждый раз вводить файл. Любая помощь будет принята с благодарностью.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char ch, file_name[25];
    FILE *fp;

       printf("Enter name of a file you wish to see\n");
       gets(file_name);

       fp = fopen(file_name, "r"); // read mode

       if (fp == NULL)
       {
          perror("Error while opening the file.\n");
          exit(EXIT_FAILURE);
       }

       printf("The contents of %s file are:\n", file_name);

       while((ch = fgetc(fp)) != EOF)
          printf("%c", ch);

       fclose(fp);
       return 0;
}

Это вывод:

Enter name of a file you wish to see
warning: this program uses gets(), which is unsafe.
Data.txt
The contents of Data.txt file are:
1
2
3
4
5
6
7
8
9
10

Ответы [ 2 ]

3 голосов
/ 24 октября 2019

Будете ли вы всегда читать из Data.txt? Если это так, вы можете жестко закодировать имя файла и заменить gets(file_name); на char * file_name = "Data.txt". Если вы сделаете это, также удалите текущее определение file_name, чтобы избежать ошибки переопределения.

0 голосов
/ 24 октября 2019

Есть несколько способов определить имя файла без вмешательства пользователя. Во всех случаях удалите

printf("Enter name of a file you wish to see\n");
gets(file_name);

Замените gets(file_name); на strcpy(file_name, "Data.txt");.

Вам также потребуется #include <string.h>.


Замените file_name[25] на file_name[] = "Data.txt"


Замените char ch, file_name[25]; на char ch; char *file_name = "Data.txt"; Вы также можете объявить строку как константу: const char *file_name = "Data.txt";.


Заменить gets(file_name); with snprintf(file_name, (sizeof(file_name)/sizeof(file_name[0]))-1, "Data.txt");

sizeof(file_name)/sizeof(file_name[0]) вычисляет максимальную длину массива путем деления общего размера массива на длину одного элемента. Мы вычтем 1, чтобы зарезервировать элемент для символа завершения строки '\0'.

snprintf() позволит вам построить имя файла программно.


Удалить , file_name[25].

Заменить fp = fopen(file_name, "r"); на fp = fopen("Data.txt", "r");.

Заменить printf("The contents of %s file are:\n", file_name); на printf("The contents of the file are:\n");

(обратите внимание на потерю функциональности)

...