4.文字を数字へ コマンドへのパラメータは文字列のみです。従って数値をプログラムへ渡すには、 変換する必要があります。 まずは、下記の13行を入力してコンパイルして下さい。プログラム名は仮に para2num.cとして下さい。 #include <stdio.h> #include <string.h> main(int argc, char *argv[]) { int ii, ll, x = 0; ll = strlen(argv[1]); for (ii = 0; ii < ll; ii ++) { x = x * 10; x = x + argv[1][ii] - 48; } printf("パラメータは[%s]です。数値では[%d]です。\n", argv[1], x); } コンパイルは通りましたか?ちょっと長くなったのでエラーが出た時に迷うでしょう。 それでは、実行してみましょう。実行する際はパラメータを指定します。 para2num 123 いかがですか? 画面には「パラメータは[123]です。数値では[123]です。」と表示されましたか? 表示では同じ[123]ですが、実は全然違う物です。 文字では計算出来ませんが、数値になると計算出来る様になります。 今回の学習項目 1)string.h 文字列を編集する関数が定義されているヘッダーファイルstring.h をインクルードします。 これは、strlenを使用する為です。 2)strlen 文字列(string)の長さ(length)を求める関数です。 従って、argv[1]と言うパラメータで渡された文字列の長さをllと言うint型 の変数に返します。 今回は「123」なので「3」文字がセットされます。 3)for (ii = 0; ii < ll; ii ++) {...} 繰り返しを表わすループ文の一つで()内の条件でループします。 左項の「ii = 0;」は初期値を定義します。iiに0をセットします。 中項の「ii < ll;」は条件式です。iiがllより小さい間と言う意味です。 この条件が成立する間{}内の処理を実行します。 右項の「ii ++」はiiをインクリメント(加算)します。 内容はii = ii + 1と同じで、iiを1だけカウントアップします。 以上をまとめると、iiと言う変数を使用して初めiiに0をセットします。 それからiiがllより小さい間ずっと{}内を実行しながら実行する毎に iiを1づつカウントアップして条件を比較していく事になります。 4)x = x * 10; xに10をかけます。 計算式中の*は掛け算を表わします。 5)x = x + argv[1][ii] - 48; argv[1][ii]は1つ目のパラメータの文字列でiiを足した位置の文字です。 123と言うパラメータを指定した時に、iiが0なら1、iiが1なら2と 言う意味です。 - 48は、数字の文字コード(アスキーコードと呼ばれています)の0が48から 始まり以降123456789と続いている為に48をひく事により数値化が 出来るのです。 従って、1はコードで49なので48を引いて1になります。