sscanf читает строку в () - PullRequest
       193

sscanf читает строку в ()

2 голосов
/ 07 апреля 2011

этот вопрос беспокоит меня в эти несколько дней. Я хочу прочитать строку, например, input = (-0.001999, -0.919191, -0.777777,999999.999999) используя sscanf. И мой код

char x[10], y[10], z[10], angle[10];
sscanf( input+1, "%[^,],%[^,],%[^,],%[^)]", &x, %y, &z, &angle);
printf("%s %s %s %s\n", x, y, z, angle);

ожидаемый результат: x = -0,001999 y = -0,919191 z = -0,777777 a = 999999,9999999

но мой printf показывает: x = -0.001999 y = -0.919191 z = 999 a = 999999.999999

Может кто-нибудь помочь мне выяснить, в чем проблема?

ТНХ!

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

После устранения нечетного переполнения буфера и так далее, я получаю:

char input[] = "(-0.001999,-0.919191,-0.777777,999999.999999)";
char x[10], y[10], z[10], angle[14];
sscanf( input+1, "%9[^,],%9[^,],%9[^,],%13[^)]", x, y, z, angle);
printf("%s %s %s %s\n", x, y, z, angle);

и вывод, который я получаю из этого:

-0.001999 -0.919191 -0.777777 999999.999999
1 голос
/ 07 апреля 2011
Угол

недостаточно велик для хранения входных данных и, следовательно, z перезаписывается.Попробуйте это:

char x[80], y[80], z[80], angle[80];
0 голосов
/ 07 апреля 2011

Ваш тип sscanf должен быть sscanf( input+1, "%[^,],%[^,],%[^,],%[^)]", x, y, z, angle);, так как ваши массивы уже являются указателями (а у y в вашем примере есть%). Другой респондент решил проблему с корнем.

...