• ベストアンサー

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命令では再現できません。  超初心な質問ですが、わかる方がいらっしゃったら、やり方を教えてください。

noname#129397
noname#129397

質問者が選んだベストアンサー

  • ベストアンサー
  • tediwec
  • ベストアンサー率70% (21/30)
回答No.1

こんにちは。 char型の変数を用意してそれにカンマを入れるようにしてみました。 int a, b, c; char comma; cin >> a >> comma >> b >> comma >> c; こんな感じでどうでしょうか?

noname#129397
質問者

お礼

 私のコンピュータでやってみると、うまくいきました。  いい考えをありがとうございました。

その他の回答 (1)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

scanfと同じ動作をさせたいなら、素直にscanfを使えばいいと思いますが。 cinとscanfは全く別物ですから, cinで全て出来ると考えるのは間違いでしょう。 まあ、長々とプログラムを書くつもりならできないことはないかも知れませんが,そんなことに労力を使う必要はないでしょう。 ちなみに、#1の回答で「似た動作」はしても、 同じ動作はしません。 その違いが問題になるかどうかはケースバイケースですが。 C++の勉強なら他にやることがあると思いますので,そこまでcinに拘ることは無いと思います。

noname#129397
質問者

お礼

 なるほど、C言語とC++は互換性があるっていう話を聞いたことがあります。それもそうですね。  いい考えをありがとうございました。

関連するQ&A

  • C++:cinが上手く使えない

     そもそもcinについてあまり詳しい事は知らないのですが よろしくおねがいします。  cinを使って整数を取りこもうとする時、数字以外が 入ってしまうとおかしな動作をします。  例えば「10未満の整数値を取りこむまで続くループ」で 入力部分を作ろうとした時に、 while(1){  cout << "入力してください" << endl;  cin >> int_a;  if(int_a < 10) break; } 大体 以上の様に書くと、入力する時にアルファベットが 入ってしまうと 入力して下さい 入力して下さい …(エンドレス)… 入力して下さい となってしまいます。cinをあきらめてscanfにしてみると 今度は実行時エラーがでてしまいます。  整数を入力する事が出来て、なおかつアルファベットが 入力されても' 'で囲った値が入るようにするには どのようにすればよいでしょうか?

  • C++の問題

    このプログラムを実行し、値234,453290453294をfloatとdoubleで定義した変数に代入して、画面に出力した時、どうなるか?実行結果にはどのような結果違いが発生し、なぜそうなるのかの理由を述べよ 文字変数aにbという文字、文字変数cにdという文字を代入して、変数aとcを使って、dbと出力するプログラムを作成せよ 誰かこれ助けてくれませんか

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • プログラミング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通りだけでいいので書いて頂けると幸いです。

  • ループ中でのscanfおよびcin

    あまりに基礎的な質問ですが,ループ中の入力関数が期待する動作になりません. コードを載せます while (1) { int key; scanf("%d", &key); if (key == 1) break; } 期待する動作は1が入力されるまでループし続けるというものですが scanfは一度しか実行されずループし続けます,cinに変えても同様でした 何が原因か分かる方,ご教示ください

  • cinの区切り文字の書き方

    Cで、 int h, m, s; scanf("d:%d:%d", &h, &m, &s); をC++ のcinを使って書きたいのですが、区切り文字の「:」の書き方が調べているのですがよく分かりません。 御経験のある方、御教示願えればと思います。

  • cinで、異なる型のデータが入力された時の対処法

    こんにちは。 OSは現在、64bit版のWindows7を使っています。 C++のcinストリームで指定した変数の型とは異なる型のデータが入力された時に、再びデータを入力するように促すC++プログラムを作成しました。 そのプログラムの内容は以下の通りです。(main関数のみ) ------------------------------------------------------------ int main() { int int_a=0; while(true) { cout << "整数値を入力せよ。:"; cin >> int_a; nn; if(cin.good()==0){ //cin.good()は、直前のcinで入力されたデータ型が、指定した変数の型に一致しなければ、0を返す。 cout<<"整数値以外のデータが入力された。"<<endl; cin.clear(); //cinストリームの入力バッファをクリアする。 cin.seekg(0); //cinストリームの入力バッファの先頭に移動する。 continue; } else{ break; } } return 0; } ------------------------------------------------------------ コマンドプロンプト上で、Borland C++ Compiler 5.5 のbcc32コマンドを使い、 上記のソースから実行ファイルをビルドして実行すると、以下のように上手くいきました。 ------------------------------------------------------------ C:\Emacs_for_Windows\C_and_C++_Programs >bcc32 1.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland 1.cpp: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland C:\Emacs_for_Windows\C_and_C++_Programs >1.exe 整数値を入力せよ。:a 整数値以外のデータが入力された。 整数値を入力せよ。:abc 整数値以外のデータが入力された。 整数値を入力せよ。:-1 -1が入力された。 C:\Emacs_for_Windows\C_and_C++_Programs > ------------------------------------------------------------ 一方、Gnu Emacs for Windows 23.4のシェルモードで、Cygwinのbashを使い、Cygwinのg++-3.exeを使って実行ファイルをビルドし、それを実行してみると、以下のように上手く動作しませんでした。。 ------------------------------------------------------------ Kei-Lavie@Kei: ~/C_and_C++_Programs/Cpp_Programs $ /bin/g++-3.exe 1.cpp Kei-Lavie@Kei: ~/C_and_C++_Programs/Cpp_Programs $ ./a.exe 整数値を入力せよ。:a 整数値以外のデータが入力された。 整数値を入力せよ。: 整数値以外のデータが入力された。 整数値を入力せよ。: 整数値以外のデータが入力された。 整数値を入力せよ。: 整数値以外のデータが入力された。 整数値を入力せよ。: ・ ・ ・ ------------------------------------------------------------ 一体何がいけないのかわからず、困っています。 ちなみに、Emacsのシェルモードで、CygwinのbashをUTF-8環境で使えるように設定しているので、ソースファイルのエンコーディングはUTF-8(BOMなし)で、改行コードはCRCLにしています。 BCCのbcc32コマンドでは、エンコーディングシステムはSJISしか扱えないようなので、UTF-8からSJISに変更してコンパイルしました。 以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • 初心者です。C++の課題

    C++の課題が出たのですが、行き詰まりました。 cinで入力した英数字、記号から、文字の系列に変換するプログラムで、 例えば、abbcdeee00))) と入力した場合、 a b c d e 0 ) と出力されるようにしたいのです。 条件は、 入力した文字系列はchar型の変数に1文字ずつ入力されること、 使えるのは、for、while、if のみ、 入力はEOFで終わること、 以上です。どなたか教えてください。

  • C言語について

    「キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。」という問題で私は、 #include <stdio.h> void main(void) { float A; float a,b,c,d,e,f,g,h,i,j; printf("実数を入力してください:"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&d); scanf("%f",&e); scanf("%f",&f); scanf("%f",&g); scanf("%f",&h); scanf("%f",&i); scanf("%f",&j); A=(a+b+c+d+e+f+g+h+i+j)/10; printf("平均は%fです.\n",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"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

専門家に質問してみよう