Lebegőpontos számok sscanf-elése C-ben?
Van egy stringem, amiben pl. ez van:
4322.54 343.233 5343.5
Ezt szeretném átalakítani {x y z}, -re, de valamiért nem jó. Előre is köszönöm a segítséget.
float x,y,z;
sscanf(coord, "%f %f %f", &x, &y, &z);
fprintf(fwp,"{%f %f %f},\n", x, y, z);
Eredmény:
{2316,000000 0,000000 0,000000},
{2316,000000 0,000000 0,000000},
{2316,000000 0,000000 0,000000},
Vagy rosszul tárolod a stringet, vagy elírtál benne valamit. Ez például működik:
#include <stdio.h>
int main() {
char str[] = "4322.54 343.233 5343.5";
float x, y, z;
FILE *fp;
sscanf(str,"%f %f %f",&x,&y,&z);
fp = fopen("output","w");
if(!fp) {
printf("i/o error.\n");
return 1;
}
fprintf(fp,"{%f %f %f}\n",x,y,z);
fclose(fp);
return 0;
}
Kiírattam a stringet is, amit scannelek, és ez lett:
2316.6848 2.4907 1005.4099
{2316,000000 0,000000 0,000000},
2316.6179 -12.7083 26.7422
{2316,000000 0,000000 0,000000},
2316.6211 -7.5630 26.7422
{2316,000000 0,000000 0,000000}
l++;
unsigned int i;
unsigned int begin = 0;
int ccount = 0;
char coord[64];
unsigned int len = 0;
for(i = 0; i < strlen(line); i++) {
if(line[i] == ',' && begin == 0) {
begin = 1;
}
else if(line[i] == ',' && begin == 1) {
ccount++;
if(ccount != 3) coord[len++] = ' ';
else break;
}
else if(begin == 1) {
coord[len++] = line[i];
}
}
coord[len] = '\0';
float x,y,z;
fprintf(fwp,"%s\n",coord);
sscanf(coord, "%f%f%f", &x, &y, &z);
fprintf(fwp,"{%f %f %f},\n", x, y, z);
A sscanf előtti sorban egy 64 elemű char tömb van, aminek a tartalma "2316.6848 2.4907 1005.4099", és null-al van lezárva.
És ez az eredmény:
{2316,000000 0,000000 7383222846389402500000000,000000},
Korábbi kommenteknél még volt, de úgy se volt jó.
Szóközökkel:
2316.6848 2.4907 1005.4099
{2316,000000 0,000000 -0,000000},
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!