Это классическая проблема, но я не могу найти простого решения.Разбор строк целых чисел в C
У меня есть входной файл, как:
1 3 9 13 23 25 34 36 38 40 52 54 59
2 3 9 14 23 26 34 36 39 40 52 55 59 63 67 76 85 86 90 93 99 108 114
2 4 9 15 23 27 34 36 63 67 76 85 86 90 93 99 108 115
1 25 34 36 38 41 52 54 59 63 67 76 85 86 90 93 98 107 113
2 3 9 16 24 28
2 3 10 14 23 26 34 36 39 41 52 55 59 63 67 76
линий различного количества целых чисел, разделенных пробелом.
Я хотел бы проанализировать их в массиве и отделить каждую строку маркером, допустим, -1
.
Сложность в том, что я должен обрабатывать целые числа и строки.
Здесь мой существующий код, он петли на петлю scanf (поскольку scanf не может начинаться с заданной позиции).
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc != 4) {
fprintf(stderr, "Usage: %s <data file> <nb transactions> <nb items>\n", argv[0]);
return 1;
}
FILE * file;
file = fopen (argv[1],"r");
if (file==NULL) {
fprintf(stderr, "Error: can not open %s\n", argv[1]);
fclose(file);
return 1;
}
int nb_trans = atoi(argv[2]);
int nb_items = atoi(argv[3]);
int *bdd = malloc(sizeof(int) * (nb_trans + nb_items));
char line[1024];
int i = 0;
while (fgets(line, 1024, file)) {
int item;
while (sscanf (line, "%d ", &item)){
printf("%s %d %d\n", line, i, item);
bdd[i++] = item;
}
bdd[i++] = -1;
}
for (i = 0; i < nb_trans + nb_items; i++) {
printf("%d ", bdd[i]);
}
printf("\n");
}
Почему бы не использовать многомерный массив? –
Пожалуйста, пожалуйста, прекратите использование atoi() прямо сейчас. Да прямо сейчас. Измените каждый вызов atoi() на strtol() и скажите пятнадцать ошибок града, используя радиальные бусины. –
@ Подумайте, если вы собираетесь предложить совет, по крайней мере, поддержите его. В противном случае, это просто какой-то случайный Джо в интернете :-) – paxdiablo