2015-06-10 2 views
1

Я получаю только 'int' от txt, используя strtok.C - Использование strtok

Но, в письменном коде есть некоторая ошибка.

Выход первой строки хорош, но не может перейти к следующей строке.

Как я могу справиться с этим?

while (!feof(fp)) 

{ 
    fgets(buffer, 100, fp); 
    printf("%s", buffer); 
    num = strtok(buffer, " ,\t\n"); 
    i = atoi(num); 
    while (num != NULL){ 
     printf("num = %s\n", num); 
     num = strtok(NULL, ",\n"); 
     x = atoi(num); 
     num = strtok(NULL, "\t"); 
     y = atoi(num); 
     printf("i = %d, x = %d, y = %d\n", i, x, y); 
    } 
} 

текстовый файл:

1 1,1 2,2 3,3 
2 1,2 2,4 3,6 4,8 
3 
4 1,4 
5 
+0

Что такое ошибка? – OscillatingMonkey

+1

Код должен проверить возвращаемое значение 'fgets()', иначе содержимое 'buffer' не определено корректно. – chux

+0

'num = strtok (buffer,", \ t \ n "); i = atoi (num); while (num! = NULL) {'может вызывать' atoi (NULL); ' – chux

ответ

0

вопрос вы спрашиваете, кажется, не совсем понятно.

  • Если вы хотите, чтобы разобрать целое число, за которым следует переменной серии вещественных чисел Проблема заключается в том, что вы используете запятую вместо точки в качестве десятичной точки.

  • Переменные i, x и y кажутся глобальными (они являются int?), Потому что они не объявлены в блок кода, но они получают значение int, предоставляемое atoi() -array целым числом. Кроме того, некоторые строки могут иметь более трех значений.

  • Разделители, которые вы используете в strtok(), похоже, не соответствуют фактическим разделителям текста.

  • Вы обрабатываете строку, считанную fgets(), прежде чем проверять, что конец файла не был достигнут.

0

способ образца исправить

while (fgets(buffer, sizeof buffer, fp)){ 
    num = strtok(buffer, " ,\t\n"); 
    i = atoi(num); 
    num = strtok(NULL, " ,\t\n"); 
    while (num != NULL){ 
     x = atoi(num); 
     num = strtok(NULL, " ,\t\n"); 
     y = atoi(num); 
     printf("i = %d, x = %d, y = %d\n", i, x, y); 
     num = strtok(NULL, " ,\t\n"); 
    } 
}