У меня есть файл, в котором каждая строка содержит три слова, которые я хочу прочитать в массиве. Файл выглядит так:
henry eat apple
mary dance heels
jacob backflip papercup
emma freeze pen
olivia clutch throat
emily faint floor
charlotte hunt mouse
adam cut spera
michael drink beer
liam cry stair
batman jump cape
superman shoot laser
wonderwoman whip criminal
spiderman stick web
green_lantern light ring
hulk smash car
reed pull finger
sue hug shoe
johnny fly fire
thing stare flower
Это функция, которую я использую для чтения строк. Я использую strtok для помещения каждого слова в массив.
void ReadArrays(int MenuChoice, char * Number[10][4])
{
FILE *file;
int counter=0;
int NumberCounter=0;
char line[256];
file = fopen("numbers.txt","r");
while (fgets(line, sizeof line, file) != NULL)
{
if(counter>=(MenuChoice-1)*10 && counter<=MenuChoice*10-1)
{
Number[NumberCounter][0] = strtok(line, " ");
Number[NumberCounter][1] = strtok(NULL, " ");
Number[NumberCounter][2] = strtok(NULL, " ");
Number[NumberCounter][3] = counter;
NumberCounter++;
}
counter++;
puts(Number[0][0]);
}
}
MenuChoice — это переменная, которая помогает вам решить, с чего вы хотите начать чтение. Если вы выбираете 1, вы читаете первые десять строк. Если вы выберете 2, следующие 10 строк. Вот что это, если о
Я хотел поставить второе условие counter‹=MenuChoice*10-1 в то время как, но я потерпел неудачу. Таким образом, он не продолжит чтение после того, как вы прочтете 10 строк, которые искали.
Кроме того, я больше не проверял, потому что я делаю эту программу для себя, поэтому я знаю, что файл всегда будет существовать или что я не буду вводить «x» вместо числа.
Должно быть, я неправильно использую strtok или что-то в этом роде, потому что он просто не работает. Массив меняется сам. Я имею в виду, что это вывод, который я получаю:
henry
mary
jacob
emma
olivia
emily
charlotte
adam
michael
liam
batman jump cape
superman shoot laser
wonderwoman whip criminal
spiderman stick web
green_lantern light ring
hulk smash car
reed pull finger
sue hug shoe
johnny fly fire
thing stare flower
thing stare flower
Обычно следует сказать Генри 20 раз. Я также проверил. Он входит в IF только десять раз, поэтому его невозможно изменить. Я также попытался изменить способ использования strtok, используя внешнюю строку, и я написал что-то вроде
strcpy(Number[NumberCount][0],extstring)
и искал дополнительные токены с помощью extstring, приписывая его к Number[NumberCount][1] и Number[NumberCount][2] соответственно, но это все равно не сработало.
strtok
изменяет свой первый аргумент. - person Antti Haapala   schedule 25.03.2016Number[NumberCounter][3] = counter;
неверно; Я серьезно предлагаю вам скомпилировать все предупреждения. В C предупреждения на самом деле являются ошибками. - person Antti Haapala   schedule 25.03.2016strdup
полезным. - person Antti Haapala   schedule 25.03.2016