C - 小さなツールの作成 - 1つのことだけをうまくやる - コマンドライン引数, オプション
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 3章(小さなツールの作成 - 1つのことだけをうまくやる)、p.150(ピザの一切れ)の解答を求めてみる。
コード
order_pizza.c
#include <unistd.h>
#include <stdio.h>
#include <stdbool.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 = true;
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 (int count = 0; count < argc; count++)
{
puts(argv[count]);
}
return 0;
}
入出力結果(Terminal, Zsh)
% cc order_pizza.c -o order_pizza
% ./order_pizza
Ingredients:
% ./order_pizza -d
./order_pizza: option requires an argument -- d
Unknown option: '(null)'
% ./order_pizza -d del1
To be delivered del1.
Ingredients:
% ./order_pizza -t
Thick crust.
Ingredients:
% ./order_pizza ab cd
Ingredients:
ab
cd
% ./order_pizza -d del1 -t ab cd
Thick crust.
To be delivered del1.
Ingredients:
ab
cd
%