Wpis z mikrobloga

#jezykc #cpp #naukaprogramowania

Przerabiam aktualnie Head First C ;) i jednym z zadań jest przerobienie za pomocą małego programu danych z GPS'a na dane w formacie JSON.

Dane wejściowe:
42.363400,-71.098465,Speed = 21
42.363327,-71.097588,Speed = 23
42.363255,-71.096710,Speed = 17
42.363182,-71.095833,Speed = 22
42.363110,-71.094955,Speed = 14
42.363037,-71.094078,Speed = 16
42.362965,-71.093201,Speed = 18
42.362892,-71.092323,Speed = 22
42.362820,-71.091446,Speed = 17
42.362747,-71.090569,Speed = 23
42.362675,-71.089691,Speed = 14
42.362602,-71.088814,Speed = 19
42.362530,-71.087936,Speed = 16
42.362457,-71.087059,Speed = 16
42.362385,-71.086182,Speed = 21

Kod:
int main()
{

float latitude; // Szerokosc geograficzna
float longitude; // Dlugosc geograficzna
char info[80];
int started = 0;

puts("data=[");
while(scanf("%f,%f,%79[^\r\n]",&latitude,&longitude,info) == 3) {
if(started)
printf(",\n");
else
started = 1;
printf("{ latitude: %f, longitude: %f, info: '%s'}",latitude,longitude,info);
}
puts("\n]");
return 0;
}

A teraz pytanie: Dlaczego scanf nie czyta w żadnym z powyższych przykłądów przecinka? A w szczególności interesuje mnie to gdy używam znaku formatującego %79[^\r\n] DLACZEGO TUTAJ NIE CZYTA OD PRZECINKA, a czyta dopiero za? Czy scanf nie czyta przecinków ? ( ͡° ʖ̯ ͡°)

PS. Wynik działania programu
data=[
{ latitude: 42.363400, longitude: -71.098465, info: 'Speed = 21'},
{ latitude: 42.363327, longitude: -71.097588, info: 'Speed = 23'},
{ latitude: 42.363255, longitude: -71.096710, info: 'Speed = 17'},
{ latitude: 42.363182, longitude: -71.095833, info: 'Speed = 22'},
{ latitude: 42.363110, longitude: -71.094955, info: 'Speed = 14'},
{ latitude: 42.363037, longitude: -71.094078, info: 'Speed = 16'},
{ latitude: 42.362965, longitude: -71.093201, info: 'Speed = 18'},
{ latitude: 42.362892, longitude: -71.092323, info: 'Speed = 22'},
{ latitude: 42.362820, longitude: -71.091446, info: 'Speed = 17'},
{ latitude: 42.362747, longitude: -71.090569, info: 'Speed = 23'},
{ latitude: 42.362675, longitude: -71.089691, info: 'Speed = 14'},
{ latitude: 42.362602, longitude: -71.088814, info: 'Speed = 19'},
{ latitude: 42.362530, longitude: -71.087936, info: 'Speed = 16'},
{ latitude: 42.362457, longitude: -71.087059, info: 'Speed = 16'},
{ latitude: 42.362385, longitude: -71.086182, info: 'Speed = 21'}
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Saly: Dzięki ;D jeśli wpisze %f,%f%79[^\r\n] to faktycznie mam ',Speed =21', jednakże jesli zapisze %f,%f%79[^\r\n] to output programu to
data=[

]
Z czego to wynika ? Czy poprostu próbuje czytać przecinek za pomocą operatora %f który jest floatem i się sypie ? Dlaczego kompilator nie mówi nic o błędzie ?
  • Odpowiedz