2015年3月29日日曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の2.5章(小さなツールの作成: 1つのことだけをうまくやる)、エクササイズ(p.115)を解いてみる。

その他参考書籍

エクササイズ(p.115)

コード(BBEdit, Emacs)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h> //abort

char error_mode;
FILE *error_log;

#define Stopif(assertion, error_action, ...) {              \
    if (assertion){                                         \
      fprintf(error_log ? error_log : stderr, __VA_ARGS__); \
      fprintf(error_log ? error_log : stderr, "\n");        \
      if (error_mode=='s') abort();                         \
      else {error_action;}                                  \
    }}

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

  printf("data=[\n");
  while (scanf("%f,%f,%79[^\n]", &latitude, &longitude, info) == 3) {
    if (started)
      printf(",\n");
    else
      started = true;
    Stopif(latitude < -90 || latitude > 90, return 2,
           "緯度が正しくありません: %f", latitude);
    Stopif(longitude < -180 || longitude > 180, return 2,
           "経度が正しくありません: %f", longitude);
    printf("{latitude: %f, longitude: %f, info: '%s'}", latitude, longitude,
           info);
  }
  printf("\n]\n");
}

入出力結果(Terminal)

$ crun.sh sample115 < gpsdata.csv
clang ...
data=[
経度が正しくありません: -710.098450
$

0 コメント:

コメントを投稿