2014-06-06 7 views
-2

Так что я пытаюсь читать ввод из файла, отформатированный как это:чтение переменной длины строк массива, как INTS

0 3 4 1 
1 2 4 
2 
3 
4 2 

кусок кода, который я написал здесь:

for (int i = 0; i < 5; i++){ 
    if (fgets(line, MAX_LEN, in) != NULL){ 
    printf("\n%s\n", line); 
    int length = strlen(line); 
    printf("line = %d\n", length); 
    for (int j = 2; j < length; j+=2){ 
     char a; 
     a = line[j]; 
     int u = a - '0'; 
     printf("line[%d] = %d\n", j, u); 
    } 
    } 
} 

очень грубоват, но обрабатывает вышеуказанный входной сигнал с одним знаком, однако мне нужно, чтобы он обрабатывал двузначные значения. Я думал об использовании sscanf(), но линейные входы могут содержать произвольное количество значений, поэтому я не знаю, сколько раз называть его. Любая помощь здесь была бы замечательной, поскольку я в недоумении ... Спасибо!

ответ

0

Я предлагаю вам использовать strtol

Вот пример того, как использовать его:

#include <stdio.h> 
#include <string.h> 

int main() { 
    char str[20]="1 8 0 8 99"; // or your line 
    char *pt; 

    int numbers[10]; // array to read the numbers 
    int index = 0, i; 

    numbers[index] = strtol(str, &pt, 10); // decimal numbers 
    index++; 

    while(*pt !='\0') 
    { 
     numbers[index] = strtol(pt, &pt, 10); 
     index++; 
    } 

    for(i=0; i<index; i++) printf("%d ", numbers[i]); 
    return 0; 

} 

Выход в этом примере будет:

1 8 0 8 99

Теперь я позволяю вам нужна интеграция strtol в вашу реальную программу удачи :)

0
for (int i = 0; i < 5; i++){ 
    if (fgets(line, MAX_LEN, in) != NULL){ 
    printf("\n%s\n", line); 
    int length = strlen(line); 
    printf("line = %d\n", length); 
    int len, u; 
    sscanf(line, "%*d%n", &len); 
    for (int j=len;sscanf(line + j, "%d%n", &u, &len)==1;j+=len){ 
     printf("line[%d] = %d\n", j+1, u);//+1 : one space 
    } 
    } 
} 
Смежные вопросы