## 2018年3月23日金曜日

### C - 小さなツールの作成 - 1つのことだけをうまくやる(範囲の指定、エラー状態、カンマ区切りデータを読み込み、JSON形式で表示する)

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の3章(小さなツールの作成 - 1つのことだけをうまくやる)、ポケットコード(p. 115)を取り組んでみる。

ポケットコード(p. 115)

```#include <stdio.h>
#include <stdbool.h>

int main() {
float latitude;
float longitude;
char info[80];
int started = false;

puts("data=[");
while (scanf("%f,%f,%79[^\n]", &latitude, &longitude, info) == 3) {
if (started) {
puts(",");
} else {
started = true;
}
if (latitude < -90 || latitude > 90) {
printf("緯度(%f)が予想値の範囲外\n", latitude);
return 2;
}
if (longitude < -180 || longitude > 180) {
printf("経度(%f)が予想値の範囲外\n", longitude);
return 2;
}
printf("{latitude: %f, longitude: %f, info: '%s'}",
latitude, longitude, info);
}
puts("\n]");
}
```

```\$ cc sample.c -o sample
\$ ./sample < gpsdata1.csv
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'},

\$ cat gpsdata1.csv
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
423.62457,-71.087059,Speed = 16
42.362385,-71.086182,Speed = 21\$
```