Переход на следующую строку при считывании данных из файла в Си
Суть задачи - дан текстовый файл с строками чисел, написанных через пробел (пример входных данных) :
1 -6 8 4 8 ... 8
1 8 6 3 6 ... 1
................................
8 5 2 9 0 ... 5
Эти числа нужно вбить в двумерный целочисленный массив произвольного размера, но возникла проблема - если нужно считать строку не до конца, как осуществить переход на следующую строку и продолжить считывание уже с неё?
Покажи сначала, как у тебя сделано.
А так можно getline-ом читать в переменную string, её анализировать уже, делить(для этого есть готовая функция класса) и т.д..
Для считывания данных из файла построчно в Си можно использовать функцию fgets. Она считывает символы из файла, пока не встретит символ перехода на следующую строку ('\n'), или пока не будет достигнут конец файла.
Пример кода:
#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.
Тут цыклы помогут и условия: если не до конца! перейти на новый индекс массива