2017年12月2日土曜日

開発環境

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

ピザの一切れ(p. 150)

Visual C(Visual Studio)にはunistd.hヘッダーファイルは標準では含まれていないみたいなので、getopt関数等も無い。ということで探してみたら、Getopt-for-Visual-Studioというのを github で見つけたので利用させてもらうことに。

コード

#include <stdlib.h>
#include "getopt.h"

int main(int argc, char *argv[]) {
 char *delivery = "";
 int thick = 0;
 int count = 0;
 char ch;

 while ((ch = getopt(argc, argv, "d:t")) != EOF)
 {
  switch (ch)
  {
  case 'd':
   delivery = optarg;
   break;
  case 't':
   thick = 1;
   break;
  default:
   fprintf(stderr, "Unknown option: '%s'\n", optarg);
   return 1;
  }
 }
 argc -= optind;
 argv += optind;

 if (thick)
  puts("Thick crust.");

 if (delivery[0])
  printf("To be delivered %s.\n", delivery);

 puts("Ingredients:");

 for (count = 0; count < argc; count++)
  puts(argv[count]);
 return 0;
}

入出力結果(コマンドプロンプト)

C:>order_pizza.exe
Ingredients:

C:>order_pizza.exe ingredient1
Ingredients:
ingredient1

C:>order_pizza.exe -a ingredient1
order_pizza.exe: unknown option -- a
Unknown option: '(null)'

C:>echo %ERRORLEVEL%
1

C:>order_pizza.exe -d
order_pizza.exe: option requires an argument -- d
Unknown option: '(null)'

C:>order_pizza.exe -d Shinjuku
To be delivered Shinjuku.
Ingredients:

C:>order_pizza.exe -d Shinjuku -t
Thick crust.
To be delivered Shinjuku.
Ingredients:

C:>order_pizza.exe -t -d Shinjuku
Thick crust.
To be delivered Shinjuku.
Ingredients:

C:>order_pizza.exe -dt Shinjuku
To be delivered t.
Ingredients:
Shinjuku

C:>order_pizza.exe -td Shinjuku
Thick crust.
To be delivered Shinjuku.
Ingredients:

C:>order_pizza.exe -td Shinjuku ingredient1 ingredient2
Thick crust.
To be delivered Shinjuku.
Ingredients:
ingredient1
ingredient2

C:>order_pizza.exe -d
order_pizza.exe: option requires an argument -- d
Unknown option: '(null)'

C:>echo %ERRORLEVEL%
1

C:>

0 コメント:

コメントを投稿