fscanf в 2d массив в C - PullRequest
       7

fscanf в 2d массив в C

0 голосов
/ 22 ноября 2018

Я хочу сканировать элементы из текста в массив.У txt нет количества строк или столбцов, которые я собираюсь иметь, он содержит только координаты и элементы массива.Это выглядит так:

2,3
2,1
3,0
-

Как я могу поместить эти числа в массив, чтобы array[0][0] было 2, а array[1][0] было 3 и т. Д.

Я хочу, чтобы это работало и с другими входами.

Мой код пока:

The ??это потому, что я понятия не имею, как мне их объявлять, если я даже не знаю, сколько строк или столбцов будет у каждого входного текста.

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

int main()
{
FILE* in = fopen("in.txt", "r");

int x, y;

int array[??][??];

if (in == NULL) {
    printf("Can't open in.txt");
    fclose(in);
    return 1;
}

if (fscanf(in, "%d,%d\n", &x, &y) != 2) {
    printf("Cant read file.");
    return 2;
}

for (int i = 0; i < ??; i++) {
    for (int j = 0; j < ??; j++)
    fscanf(in, "%d", &array[i][j]);
}

return 0;
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы должны использовать динамическое выделение массива для сканирования элементов из неизвестного текстового файла в массив.для программистов на C ++ лучшее решение - std :: vector .но программисты на С должны использовать альтернативные решения.пожалуйста, прочитайте этот пост: ( std :: vector альтернатива для C )

0 голосов
/ 22 ноября 2018

Вы хотите прочитать список пар значений?Похоже, вам понадобится (возможно, длинный) массив наборов из двух чисел.Вместо того, чтобы помнить, что X является первым, а Y - вторым, позвольте мне предложить создать структуру для хранения значений.Что-то вроде этого должно работать:

int main()
{
    FILE* in = fopen("lis.csv", "r");
    int count=0;
    int error=0;
    int x, y;
    typedef struct {
        int x;
        int y;
    } COORD;
    COORD array[999]={0};
    if (in == NULL) {
        printf("Can't open in.txt");
        fclose(in);
        return 1;
    }
    while(!feof(in))
    {
        if (fscanf(in, "%d,%d\n", &x, &y) != 2) {
            printf("Cant read file.");
            error=1;
            break;
        }
        array[count].x=x;
        array[count].y=y;
        count++;
    }
    return error;
}

Я не добавил ничего яркого для условия ошибки, и это помогает, если вы что-то делаете со значениями после их чтения, но у вас есть идея.

...