Kezdőoldal » Számítástechnika » Programozás » Lebegőpontos számok sscanf-elé...

Lebegőpontos számok sscanf-elése C-ben?

Figyelt kérdés

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},


2015. okt. 28. 10:27
 1/9 anonim ***** válasza:

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;

}

2015. okt. 28. 12:05
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

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}

2015. okt. 28. 12:11
 3/9 anonim ***** válasza:
Inkább másold be az egész kódot...
2015. okt. 28. 12:19
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

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);

2015. okt. 28. 12:29
 5/9 A kérdező kommentje:

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},

2015. okt. 28. 12:31
 6/9 anonim ***** válasza:
Az sscanf() format-jében nincsenek szóközök.
2015. okt. 28. 13:00
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:

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},

2015. okt. 28. 13:14
 8/9 A kérdező kommentje:
Akkor valami más kivitelezés, ha ebben nem találjátok a hibát?
2015. okt. 28. 17:18
 9/9 A kérdező kommentje:
Megoldva, a locale átállításával volt probléma. Vessző volt az alapértelmezett elválasztó, így a pontokat nem jól értelmezte, és kiírásnál is azért volt vessző.
2015. okt. 28. 17:28

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!