Top.Mail.Ru
Ответы

Переход на следующую строку при считывании данных из файла в Си

Суть задачи - дан текстовый файл с строками чисел, написанных через пробел (пример входных данных) :
1 -6 8 4 8 ... 8
1 8 6 3 6 ... 1
................................
8 5 2 9 0 ... 5
Эти числа нужно вбить в двумерный целочисленный массив произвольного размера, но возникла проблема - если нужно считать строку не до конца, как осуществить переход на следующую строку и продолжить считывание уже с неё?

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

Покажи сначала, как у тебя сделано.
А так можно getline-ом читать в переменную string, её анализировать уже, делить(для этого есть готовая функция класса) и т.д..

Аватар пользователя
Гуру

Для считывания данных из файла построчно в Си можно использовать функцию fgets. Она считывает символы из файла, пока не встретит символ перехода на следующую строку ('\n'), или пока не будет достигнут конец файла.

Пример кода:

12345678910111213141516171819202122232425262728293031323334353637383940414243
 #include <stdio.h> 
 
int main() { 
    FILE* file = fopen("file.txt", "r"); 
    if (file == NULL) { 
        printf("Cannot open file\n"); 
        return 1; 
    } 
 
    int rows = 10; // пример размера массива 
    int cols = 5; 
 
    int array[rows][cols]; 
 
    for (int i = 0; i < rows; i++) { 
        char line[100]; // достаточно для строки длиной до 99 символов 
        if (fgets(line, sizeof(line), file) == NULL) { 
            printf("Error reading file\n"); 
            return 1; 
        } 
 
        // считываем числа из строки по одному 
        char* num = strtok(line, " "); // разделитель - пробел 
        int j = 0; 
        while (num != NULL && j < cols) { 
            array[i][j] = atoi(num); // преобразуем строку в число 
            j++; 
            num = strtok(NULL, " "); 
        } 
    } 
 
    fclose(file); 
 
    // выводим массив для проверки 
    for (int i = 0; i < rows; i++) { 
        for (int j = 0; j < cols; j++) { 
            printf("%d ", array[i][j]); 
        } 
        printf("\n"); 
    } 
 
    return 0; 
} 

Этот код считывает данные из файла "file.txt" и сохраняет их в двумерном массиве array размером 10x5. Для считывания каждой строки из файла используется функция fgets, а для преобразования строки в число - функция atoi.

Аватар пользователя
Профи

Тут цыклы помогут и условия: если не до конца! перейти на новый индекс массива