- ベストアンサー
この問題が解けません( iдi )
コマンドプロンプトで prog01 12 + 35 47 と表示する加算プログラムを作りたいのですがわかりません。どなたかおねがいできませんか。 =====prog01========== #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { int result; /*ここに処理の記述*/ printf("result = %d\n", result); }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そういうプログラムをフリーソフトとして出してます。 で、結論からいうと、このプログラムは「どの程度まで」作りこむかを厳密に決めておかないと、ほいほいと簡単に作れるものではありません。 1.数式の間違いや入力ミスに対するエラー処理 2.文字←→数字の変換に関わる処理 3.カッコの優先処理 4.数学関数の処理 5.基本四則演算処理 俺が作ったプログラムは自分が使いたいだけなのでこれだけで充分ですが、さらに本格的にやるんならこれでもまだ全然足りません。 で、実際のところ、どの程度までできればいいんでしょうか?(^_^; 純粋に「??+??」という足し算ができればよくて、他の計算式は全く考慮しない、エラー処理も必要ないということであれば、 printf("%d", atoi(argv[1])+atoi(argv[3])); というプログラムが1行あれば事足ります。 ですが、四則演算全てに対応するなら argv[2] の内容が "+" "-" "*" "/" の4つのうちのどれか、もしくはそれ以外かによって処理を分岐する必要があります。 さらに演算記号が複数出てくる数式に対応したり、カッコのある計算式に対応したいということであれば、引数をすべて1つにまとめて文字列解析を行う、といった複雑な処理も必要になってきます。 どのレベルまで作りこむかによってアドバイスも変わってきますので、その辺を補足してください。
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
[1] argv[n] が コマンドプロンプトで入力されたn番目の値 [2] 関数 atoi() で数字から数値に変換 [3] argv[2][0] == '+' なら加算、'-'なら減算
お礼
皆さんの力添えでなんとかできました。どうもありがとうございます。
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 #2さんが回答されています、 printf("%d", atoi(argv[1])+atoi(argv[3])); この意味はわかりましたか? この意味と、文字比較の仕方を知っていれば解ける問題だと思います。 少し考えてみましょう^^
補足
はい。わかりました、考えてみます。どうもありがとうございます。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
何がわかりませんか? [1] コマンドプロンプトから値(文字列)を取り込むこと [2] [1]で得られた'数字'を'数値'に変換すること [3] [2]で得られた数値を足す/引くこと [4] [3]で得られた結果を表示すること 'わからない'を説明してください。
補足
[1][2][3]です。(ノ_<。)うっ ごめんなさい
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 どういった加算処理をしたいのでしょうか? もう少し具体的に処理の内容を教えてください。 それと、ご自身では、どこまで出来ましたか? 全く処理手順を思いつかないようでしたら考え方が全く身についてない、という事ですので、生にアドバイスを求めた方がご自身の為になると思います。 (身につかなくても本問題が解ければそれでいい、というのであれば回答させて頂きますが(笑)) とりあえず、表示したいだけならば、 printf("prog01 12 + 35\n47\n"); という、たった一行の命令で出来てしまいます。 多分、これでは問題の意図とは違いますよね。
補足
はい。現在ポインタ配列の問題をやっているのですが、windowsで、visualc++を使っています。そこで コマンドプロンプトにprog01 12 + 35と入力すると、 47を返すプログラムを作りたいのです。 もちろんprog01 12- 35とすれば-23を返す加減算プログラムです。実行する手順はわかるのですが、どうプログラムすればいいのか全くわかりません。ほかに頼る人がいなかったので投稿した次第です。申し訳ありません。
補足
たびたびのご回答本当にありがとうございます。 私は大学1年生の全くの初心者です。おそらくただ純粋に足し算ができればよいものであると思います。 問題にある /*ここに処理の記述*/ と書かれている場所に何らかを記述するだけの課題ですので、全く深いものではありません。