いちばん失敗した人決定戦

C言語で教えていただきたいです。
これはコマンドライン入力に複数の整数値を入力すると,
入力した整数値の合計を計算するというプログラムなのですが、
各行がどんな働きをしているのか教えていただけますでしょうか??

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
int sum = 0;
for (int i = 0; i < argc; ++i)
sum += atoi(argv[i]);
printf("%d\n", sum);

return 0;
}

A 回答 (2件)

#include <stdio.h>/* 標準入出力ライブラリをインクルード */


#include <stdlib.h>/* 標準ライブラリをインクルード */

int main(int argc, char** argv) {/* main関数を定義開始 */
int sum = 0;/* 変数を累積器(アキュムレータ)として初期値0で定義 */
for (int i = 0; i < argc; ++i) { /* カウンタiをコマンドライン引数の最大個数まで増やす */
sum += atoi(argv[i]); /* 累積器にコマンドライン引数を整数に変換しながら加算する */
}
printf("%d\n", sum); /* 累積器の中身を表示 */

return 0; /* 正常終了 */
}

注意点:
1. コマンドラインで受け取った引数(argv[i])は文字列。だからこういう場合は整数に変換しないとならない。
2. atoi関数は時代遅れ。なるたけstdlib.hに含まれるstrtol関数を用いた方が良い。

strtol:
http://www9.plala.or.jp/sgwr-t/lib/strtol.html
    • good
    • 0
この回答へのお礼

詳しいご説明をありがとうございました!
とても助かりました。
時代遅れになる関数というものもあるのですね。。
参考になります。

お礼日時:2021/06/02 00:04

この後、真面目な回答が得られると思います。


私は、少し面白い質問だと思いましたので、少し変わった提案をします。

各1行だけ減らしてコンパイル・実行し、
コンパイルが通らない。あるいは実行動作の変化から、
削除した箇所の意味を見出す。というアプローチです。

これで意味が解らなくても、あまり思い詰める必要はありませんが、
決定的に動作の変わる行もあり、その発見による感動が、
より深い理解への切っ掛けになる事が割とよくあります。
    • good
    • 0
この回答へのお礼

なるほど!大変参考になるご回答をありがとうございます。
確かに実行と変化からの理解のほうがより深く理解できそうですね!!

お礼日時:2021/06/02 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!