Как распечатать содержимое файла в C, используя функцию? - PullRequest
0 голосов
/ 18 октября 2019

Я очень noob в C, а также мы не можем использовать ftell () или что-то подобное. Я не могу распечатать содержимое моего файла, как меня просят. В конце концов, это задача, в которой я должен был создать функции, которые считывают содержимое файла и сохраняют его в массиве, затем возвращают количество элементов в файле, и вmain () Мне пришлось распечатать, используя функцию readStations (). В main () также должен быть массив railLine [100] типа station.

Файл имеет следующий текст:

1. 0.0 London-Kings-Cross*
2. 3.9 Finsbury-Park*
...

Прежде всего, я создал typedefstruct называется station со свойствами km и name , которые являются расстоянием и названием станций. Я пытался создать функцию readStations (имя файла [20], строка станции [])

Моя попытка заключается в следующем:

 #include <stdio.h>

 typedef struct {
   char name[30];
   double km;
 } station;

 int readStations(char filename[20], station line[]){

   FILE* openedFile;
   openedFile = fopen(filename, "r");

   if(openedFile == NULL){ 
     printf("Some problem occured with opening of file");
     return 1;
   }

   station stations;

   int count = 0;
   for (; !feof(openedFile); count++){
     fscanf(openedFile, "%lf %s", &stations.km, stations.name);
   }

   int numberOfStations = count;

   return count;
  }


  int main(){

    station railwayLine[100];
    printf("");
  }

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

1 Ответ

1 голос
/ 18 октября 2019

Кажется, это соответствует вашим опасениям. Обратите внимание, что функция readStations() теперь сообщает, сколько станций она может сохранить. Он также закрывает файл, который был открыт. Функция printStations() печатает данные.

#include <stdio.h>

typedef struct
{
    char name[30];
    double km;
} station;

static int readStations(char filename[], int max_line, station line[])
{
    FILE *openedFile = fopen(filename, "r");

    if (openedFile == NULL)
    {
        fprintf(stderr, "Some problem occurred opening the file %s\n", filename);
        return 0;
    }

    int count;
    for (count = 0; count < max_line; count++)
    {
        if (fscanf(openedFile, "%lf %s", &line[count].km, line[count].name) != 2)
            break;
    }

    fclose(openedFile);
    return count;
}

static void printStations(int num_stations, station line[])
{
    for (int i = 0; i < num_stations; i++)
        printf("%2d. %6.2f km - %s\n", i, line[i].km, line[i].name);
}

int main(void)
{
    enum { MAX_STATIONS = 100 };
    station railwayLine[MAX_STATIONS];
    int num_stations = readStations("stations.txt", MAX_STATIONS, railwayLine);
    printStations(num_stations, railwayLine);
}

Заданные входные данные (файл stations.txt):

0.0 London-Kings-Cross*
3.9 Finsbury-Park*

Вывод:

 0.   0.00 km - London-Kings-Cross*
 1.   3.90 km - Finsbury-Park*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...