edit: использование обычного c
это отчасти относится к моему последнему вопросу, но я полностью переписал код около 3 раз, и теперь я в полном затруднении.Я прочитал очень много разных вещей о 2D-массивах, я запутался, потому что то, что я считаю правильным, другие сообщения stackoverflow смущают меня еще больше: (
Например:
char array[A][B];
Некоторые источники говорят, что A - это число полей, а B - длина одного поля, в то время как другие говорят, что A - это число строк, а B - количество столбцов матрицы. Другие говорят, что это сохраняет только отдельные символы..
Переходя к моей проблеме:
Я пишу тест, и у меня есть файл базы данных, в котором каждая строка выглядит так:
Multiple Words A#Multiple Words B#Multiple Words C
Теперь я хочу прочитать файл и разбить строку на несколько переменных, которые определены следующим образом:
char frageinhalt[50][255]; // the question itself (later smth like "capital of germany?"
char antw1[50][255]; // the first answer to the question
char antw2[50][255]; // second answ
Строки должны быть разделены следующим образом:
Multiple Words A => frageinhalt
Multiple Words B => antw1
Multiple Words C => antw2
каждая строка должна получить назначенное поле в массивах, поэтому я могу просто напечатать их в других функциях.
Например: я хочу напечатать первый вопрос и его ответы
printf("%s,%s,%s",frageinhalt[0],antw1[0],antw2[0]);
Но это не работает в моем коде. Есть идеи?
Полный код нижеш.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int readfromfile(); // func prototype
char data[100]; // a row from the file
char temp[50];
//Fragebezogen
char id[50][5]; // question nr
char frageinhalt[50][255]; // the question itself (later smth like "capital of germany?"
char antw1[50][255]; // the first answer to the question
char antw2[50][255]; // second answ
int main() {
readfromfile();
printf("\nFrageinhalt: %s Antw1: %s Antw2: %s\n", frageinhalt[1], antw1[1], antw2[1]); // Doesn't work properly
return 0;
}
int readfromfile() {
FILE *datei_ptr;
int i = 0;
char ch;
int lines = 0;
int k = 0;
char delimiter[] = ",;#";
char *ptr;
datei_ptr = fopen("test.txt", "r");
if (datei_ptr == NULL) {
printf("nothing left in file");
}
else {
while (!feof(datei_ptr))
{
ch = fgetc(datei_ptr);
if (ch == '\n') // Wenn der gerade gelesene Character ein Zeilenumbruch ist..
{
lines++; // Erhöhe die Anzahl der Zeilen um 1
}
}
fclose(datei_ptr);
datei_ptr = fopen("test.txt", "r");
do {
fgets (data, 255, datei_ptr);
puts(data);
ptr = strtok(data, delimiter);
printf("###############################\n");
while (ptr != NULL)
{
printf("Abschnitt gefunden: %s\n", ptr);
// naechsten Abschnitt erstellen
ptr = strtok(NULL, delimiter);
}
printf("###############################\n");
k++;
} while (k != lines + 1);
fclose(datei_ptr);
}
}