Добавление данных из файла в массивы - PullRequest
0 голосов
/ 30 августа 2018

У меня есть файл, в котором у меня есть такие записи:

test one; test one; test one; 1
test two; test two; test two; 2

Мне нужно отсортировать эти записи по последнему номеру, поэтому в моем предыдущем примере вторая запись должна быть на первом месте, так как 2> 1. Для этого я пытаюсь добавить каждую запись в массив, а затем применить алгоритм сортировки вставки. У меня есть некоторые проблемы при добавлении каждой части в массив, вот мое текущее усилие:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100

int main() {

    char one[MAXLEN] = {};
    char two[MAXLEN] = {};
    char three[MAXLEN] = {};
    int st[MAXLEN] = {};
    int i, j;

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


    for (i = 0; i < MAXLEN; i++) {
       fscanf(fpointer, "%s%s%s%d", &one[i], &two[i], &three[i], &st[i]);
    }


    for (j = 0; j < MAXLEN; j++) {
       printf("%s", one[i]);
    }


    fclose(fpointer);
    return 0;

}

В этом примере я попытался добавить каждое поле в массив, второй цикл for - это просто проверка, чтобы проверить, правильно ли добавляются данные в массив, но это не так.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
#define MAXWORDS 50
int main() {

    char one[MAXWORDS][MAXLEN] = {};
    char two[MAXWORDS][MAXLEN] = {};
    char three[MAXWORDS][MAXLEN] = {};
    int st[MAXWORDS][MAXLEN] = {};
    int i, j;

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


    for (i = 0; i < MAXWORDS; i++) {
       fscanf(fpointer, "%s%s%s%d", one[i], two[i], three[i], st[i]);
    }


    for (j = 0; j < MAXWORDS; j++) {
       printf("%s", one[j]);
    }


    fclose(fpointer);
    return 0;

}

проверьте, работает ли эта программа В этой программе вы использовали функцию fscanf (), которая может извлекать данные из файла слово за словом. Здесь вам нужно позаботиться о том, чтобы fscanf () не давал вам пробелов, а также символ завершения строки '\ n'.

0 голосов
/ 30 августа 2018

вы в настоящее время сканируете свои данные в 3 строки, каждый раз сдвигая смещение на 1 вместо 3 таблиц строк.

Вам нужно объявить свои данные другим способом. Например, двумерный массив char

Вместо этого я предлагаю структуру и массив структур, поэтому у вас есть только один индекс (здесь я предполагаю, что максимальный размер для строки равен 100):

   typedef struct Element
   {
    char one[100];
    char two[100];
    char three[100];
    int st;
   };

  Element elements[MAXLEN];

теперь сканируйте так:

  for (i = 0; i < MAXLEN; i++) {
       Element *e = elements+i;  // pointer on ith element
       fscanf(fpointer, "%99s%99s%99s%d", e->one, e->two, e->three, &e->st);
    }

Используйте & для целого числа, а не для строк (это уже указатели). Также, возможно, хорошо проверить, что fscanf возвращает 4 (проверка ошибок). 99s гарантирует, что вы не переполните свои строки (макс. Длина: 100 с нулевым терминатором)

В сторону: если у вас есть строки с пробелами, scanf не будет работать должным образом, вам придется использовать fgets, а затем strtok на точках с запятой, чтобы получить элементы

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