• 締切済み

初歩的な計算をプログラムする際、c++とcの違う点

よろしくおねがいします。 c++とcの違いについて、一般的?なことはすでに過去に質問例が見つかりましたが、知りたい内容が書かれてなかったので、質問します。 当方、cの知識は少しある程度で、c++は初めてです。c++自体に興味があるわけではないのですが、読んでいる本がc++で書かれているようなのでc++をやっているといったところです。ところが、c++で書かれていると本の冒頭で宣言しておきながら、その本の中ではプログラミング初心者でも分かるように記述しようとしているらしく、stdio.h や scanf が使われているような状態です。  本はまだ最初の部分までしか進めていませんが、c++で書かれていると宣言されている以上、後の方でおそらくc++特有のコードがでてくるのだろうと予測しており、最初からc++で私自身は練習している状態です。 つまり、本はcとc++が混ざったような感じ?で書かれており、私は始めからc++をやっている(本がcっぽい場合もc++で動くように自分で修正してやっている)のです。 現在、なんとか進めておりますが、壁にぶち当たる頻度が多く、時間のロスが半端ないです。 例えば、標準入力で、scanf を ストリームなるもののcinなる関数に変えた時も、エラーが直せず、入力を促すコマンドライン上での入力の仕方が違う(スペース区切りに変わる)というのを探り当てるのに相当時間がかかりました。 やっている内容、今後やる予定の内容は計算(四則演算やループ、配列など)がほとんどです。その場合、c++とcで表記方法や入力(コマンド)方法、ファイルの取り扱いなどで困るであろう点がありましたら、教えていただきたいのです。 漠然とした質問かもしれませんが、みさなん、よろしくおねがいします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

あ, #4 に追加: 念のため「どのようにプログラムを動かしているのか」も書いてください.

jjjjjjtttta
質問者

補足

返信ありがとうございます。 質問しておいて申し訳ありませんが、人に聞けて、解決しました。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

ここに出ている情報だけからそれに対して答えることは不可能です. 少なくとも ・開発環境 (少なくとも OS やコンパイラの名称とバージョン) ・動かしたプログラム ・与えた入力 ・期待する動作 ・実際の動作 くらいの情報は出してください.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ありがちなのは (double を引数にとる) 数学関数で整数を与えて悩む, かなぁ. 「入力(コマンド)方法、ファイルの取り扱いなど」は C と C++ で同じようにもできるし違うようにもできる. プログラムと相談すべし. ちなみに cin は「関数」じゃないからね.

jjjjjjtttta
質問者

補足

どうもです。 もう少しつき合ってもらいたいのですが、 前にscanf のトラブルをだしましたが、テキストにはscanf("%d", &k[i]);とかかれており、それを含めてテキスト通りに私のc++開発環境で実行してもうまくいかなかったのです。(この場合はscanf("%d%*c", &k[i]);へと変えることでようやくうまく行きました。ですがそれを知るのに相当時間を食い、回り道しました。私の目的はc言語の学習とかではないので、そういう余分な回り道はしたくないのです。) この点はどういうことなのでしょうか? 本の記載は間違っておらず、c++環境でも動く可能性がありますか?そして動かないのはscanfが特定のc++開発環境に依存しているからということでしょうか? それともそうではなく、c++環境だと標準入力が複数続く場合はscanf("%d %d",...表記では駄目で、それぞれに%*cを付けないと動かない仕様になっているのでしょうか? よろしくお願いします。

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.2

>例えば、標準入力で、scanf を ストリームなるもののcinなる関数に変えた時も、エラーが直せず   「C++は、scanfもcinも使える」のであって「C++だから、scanfをcinに変えないといけない」と言う事はありません。C++であっても、scanfを使いたいなら使って構わないのです。   優秀なプログラマとは「元からある物は有効に使う」と「書き替えなくとも動く物は決して書き替えるな」と言う鉄則を守るプログラマの事を言うのです。   まあ学習の一環として「scanfをcinに置き換えてみる」と言うのは有効な学習方法ですので「まったくの無駄」とは言いませんが。

jjjjjjtttta
質問者

補足

早速の返答、ありがとうございます。 実はscanfも,動作確認用のprintfも、結局使いました。 ただ、最初は「hellow world」から初めたのですが、ソフト(エディタ&コンパイラ)で新規プロジェクトを始めた時にテンプレがストリーム系の記述になっていたので書き換えるのが面倒だったというのがありました。で、計算に入った時に、まだ慣れてなかったのでテキスト通りにscanf系に変更して試行錯誤してたのですがうまく動かなかったのでまた元にもどしたりしたのです。結局、ストリーム系で動くようになった後、scanf系でも動くようになりました。 鉄則については、勉強になりました。覚えておきます。 あと、私の質問に答えていただける事を期待しています。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その本がなんなのかわかりませんが, 少なくとも「stdio.h や scanf を使っているから C++ じゃない」というのが短絡的すぎることは理解してください.

jjjjjjtttta
質問者

補足

早速の返答どうもありがとうございます。 質問自体にも返答いただけることを期待しています。

関連するQ&A

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • プログラミングC言語の問題ですがわかりません。

    プログラミングC言語の問題ですがわかりません。 5つのint型変数a,b,c,ans,responseを宣言する。a,b,cの値はscanf関数で読みこむことにより初期化する。 a(1)b(2)c= と表示して、scanf関数によりユーザーの答案をresponseに読み込み、演算結果が正しければ1、間違っていたら0を表示するプログラムを作成しなさい。ここで(1)と(2)には算術演算子(+,-,*,/,%)がはいる。5×5=25通りの演算をすべて実行するようにしなさい。 特に正しければ1、間違っていたら0を表示するプログラムがわかりません。 まだprintfとscanf関数と演算子しかやっていないのでそれを踏まえたプログラムを1通りだけでいいので書いて頂けると幸いです。

  • スタック C言語

    四則演算のプログラミング(C++)をスタックを用いて作りたいのですがどうすればいいのか全く分かりません。 スタックの原理は分かるのですが…。 かなり検索してスタックの四則演算を少し見ましたが、まともに載ってるのがあまりなく…。ポーランド記述法つかうのか?とか…ドンドンわからなくなりました。 分かるかた、教えてください。 プログラミング載せてくれたら助かりますが、方針だけでも大丈夫です。 作りたいプログラミングは自分で式を入力して、実行結果にその答えが表示されるというものです。また、入力する式はポーランド記述法のものではなく、普通の式(4*2+1 など)です。

  • C言語の四則演算プログラムについて

    こんにちは。hayato2192といいます。 今回は、C言語についてのことを質問したいとおもいます。 MSN相談箱の質問の中で数ある四則演算プログラムに対する質問をみたのですが、僕がつくろうとしているプログラムとはまったくちがいました。 プログラムコードは以下です。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #include <stdio.h> main() { int d1, d2; char op; printf("START PROGRAM : Arithmetic operation\n"); printf("ENTER THE NUMBER\n"); scanf(" %d", &d1); printf("ENTER THE OPERATOR\n"); scanf(" %c", &op); switch (op) { case '+': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1+d2); break; case '-': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1-d2); break; case '*': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1*d2); break; case '/': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1/d2); break; default: printf("NO ANSWER\n"); break; } return 0; } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 使っている関数はscanf printf switchだけというとてもシンプルなプログラムなのです。 じっさい、このプログラムをBorlandのコンパイラでコンパイルすると、switch関数がまったく使われずに、演算子(このプログラムでいうOPERATORです)を入力するところで終了してしまいます。 どのように直せばよいのでしょうか。教えてください

  • C++のcin命令について

     私は、C++言語を勉強している初心者です。  ある日、C++言語では、   「cin >> a >> b >> c;」と書くと、プログラムを実行したときに、   「3 4 5」と入力すれば、変数aには 3 が、変数bには 4 が、変数cには 5 が代入されるということを知りました。  けど、今まで私がC言語を使う際に使っていた、   「scanf("%d,%d,%d",&a,&b,&c);」という文では、プログラムを実行したときに、   「3,4,5」と入力すれば、変数aには 3 が、変数bには 4 が、変数cには 5 が代入されるというように、3つの数字の間にカンマを入れて数を代入するというプログラムを作りたいのですが、どうやってもcin命令では再現できません。  超初心な質問ですが、わかる方がいらっしゃったら、やり方を教えてください。

  • C言語での複素数の四則演算について

    C言語で、大きさ2の配列を2つ使って、複素数の四則演算のプログラムを作るのですが、配列をどう使うか分からず手が出せない状態です。 C言語を始めたばかりですので、基礎的なことしか分かりませんが、回答お願いします。

  • Xcodeのデバッガについて

    Macしかもっていないため、MacでCの勉強をしている者です。 Xcodeのデバッガについて質問なのですが、CやC++のscanfやcinなどの外部入力のところでステップオーバーが進まなくなってしまいます。 入力しながら進むという事は出来ないのでしょうか?

    • 締切済み
    • Mac
  • C言語の四則演算

    C言語で次のようなプログラムを作りたいのですが ソースを教えていただけないでしょうか? 四則演算のみの計算式を標準入力から受け取り計算式の通りに計算を行い計算式と答えを標準出力に出力する どなたか教えてください

  • C初心者に課題をください。

    現在学校でC言語の勉強をしています。 自分のC言語の実力は、基本情報のC言語がちょっと理解できるぐらいです。 しかも、Cを読むのは慣れていますが、あまり書いたことはありません。 そこで、C言語の実力向上を図って、自分に課題を出していろんなプログラムを作って行きたいのですが、さっそく何を作ればいいのかわかりません。 過去に自分がこんなプログラムを作ったとか、よい案がありましたら何でもいいので是非教えてください。 大体の機能と、あればヒントとか教えてくれる程度でいいです。 例) どんなプログラム?:電卓 機能:入力例(500*3)→表示(1500) 四則演算ができる。 続けて演算子と数値を入力すると表示結果と計算する。 よろしくお願いします。

  • 記号を入出力する際の指定子

    2次元配列に*や&といった記号を入力し出力したいのですが、 この場合の指定子は%cでいいのですか? 配列の宣言をchar、scanf,printfの指定子を%cにしたのですがうまくいきませんでした。何が間違っていますか?

専門家に質問してみよう