• ベストアンサー

cin.get(c)について

fatal_errorの回答

回答No.4

横槍気味の回答になりますが。 >if(pch=='gc') これは、"string.h"のstrcomp関数を使います。 この場合なら、 if((strcomp(pch,"gc"))==0) です。 この関数は文字列を比較する関数で、二つの文字列が一緒なら0を返します。 >一文字のときは大丈夫なのになぜ二文字だとだめなんですか? 一文字(半角の)なら、単純にASCIIコードの数値で比較すればオッケーですが、 二文字以上になると数値でってわけに行かなくなるからです。 それから「'(シングルクォート)」は、一文字のコードを表すものです。 例えば'A'はASCIIコードなら65と書いたのと同じことになります。 この場合の「二文字以上がまずい」のはそのせいでもあります。

yabuchanchan
質問者

お礼

非常にわかりやすい御回答ありがとうございました、 お二人には今回非常に有益な回答をしてもらって感謝いたしております。 また、わからないことがあったらここに質問したいと思います。 それにしても、プログラムは奥がふかいですね。 もっと、勉強していきたいです。

関連するQ&A

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

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

  • C C++ cinとは?

    Javaの本しか読んだことがないのですが、データ構造とアルゴリズムの本を読んでいます。 解説がCやC++で書かれているため、わからない部分があります。 cinと出てくるのですが、これはどういったものなのでしょうか? 詳しい方いらっしゃいましたら、教えてください。 よろしくお願い致します。

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

  • テキストを一文字以上ずつ読み込みたい。

    通常テキストを一文字ずつ読み込む時って cin.get(c)とか、やりますよね? でも、二文字ずつ読み込む時ってどうやるんですか? そもそもできるんでしょうか? もしできないとしたら、それに相当する書き方とかあるんでしょうか?

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

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

  • プログラムが~~~!!

    こんにちは。今、プログラム書いてるんですけど目的としては、 1、テキストファイルから文字列を読み込む。(大体数万文字) 2、それを100個ずつに区切る。 3、その百個ずつを二文字ずつ読んでいって、それがgcという文字列ならばその 百個の中での割合を示す。 4、さらに次の百個を・・・・ みたいなプログラムを書いてるんですけど一応下のような形までこぎつけましたが もう、お手上げです。 どなたか、助けてください。 #include<iostream.h> #include<stdio.h> #include<string.h> int main() { char pch[3]; int count=0; FILE *fin; fin=fopen('C:\ahowaki.dat','r'); fscanf(fin,'%s',&pch); cout<<"入力\n"; while(pch){ cin.read(pch,2); if((strcmp(pch,"gc"))==0) count++; if(count>=0 && count<=25) cout<<"Under25%\n"; if(count>=26&& count<=50) cout<<"Under50\n"; if(count>=51&& count<=75) cout<<"Under75%\n"; if(count>=76&& count<=100) cout<<"Under99%\n"; else cout<<"Over100%\n"; } return 0; fclose(fin); }

  • Consoleアプリケーションの、「cin >>」について

    //一文字入力のつもりで、作ったのですが、 //「abcd」と打って、Enterすると、 //「a」→「A」 //「b」→「B」 //「c」→「C」 //「d」→「D」 //と、連続変換するのですが、 // cin >> -- ; というのは、 //どういうことでしょうか? // すみません、初心者です。 // よろしくお願いします。 #include <iostream> using namespace std; int main() { char inputchar; char outputchar; char Str1[12],Str2[12]; int chrcode; while(chrcode-120) { cin >> inputchar; chrcode = ( inputchar + inputchar ) / 2; if(chrcode >=65 && chrcode<=90) { outputchar=inputchar+'a'-'A'; strcpy(Str1,"大文字"); strcpy(Str2,"小文字"); } if(chrcode >=97 && chrcode<=122) { outputchar=inputchar-'a'+'A'; strcpy(Str1,"小文字"); strcpy(Str2,"大文字"); } cout << Str1 << "[" << inputchar << "]→" << Str2 << "[" << outputchar << "]" <<endl; } return 0; }

  • 意味を教えて!pual ce cin

    pual ce cin という文字に意味はありますか? 特に意味をもたない言葉かもしれません。 何語かもわからないので、何語か分かるだけでも結構です。 どなたか分かる方おしえてください!!

  • macのXcodeにおけるcinについて

    現在macOSXver10.4.11のXcode2.4.1を用いて C++言語の勉強をしています。 以下のソースをコンパイルしようとしてますが「std::cin >> str1;」の行で「error: no match for 'operator>>' in 'std::cin >> str1;'」と出てコンパイルに失敗します。 原因が分かる方がいればご教授願います。 #include <iostream> #include <stdio.h> int main (void) { char *str1[32], *str2[32]; std::cout << "何か入力して下さい ==>"; std::cin >> str1; std::cout << "あなたは" << str1 << "と入力しましたね。" << std::endl; printf("何か入力してください。==>"); scanf("%s",str2); printf("あなたは、%sと入力しましたね。\n",str2); return 0; } 初歩的な質問ですみませんがご回答の程よろしくお願い致します。

  • C側で得た変数をC++の変数に流し込みたいです。

    C側で得た変数をC++の変数に流し込みたいです。 現在、C++で 次のように、 入力ストリームから1行分の文字列を読み込んで、 読み込んだ文字列を「cmd」に流し込んだ際に、 cmdに代入された文字列が「get」であると、 他のファイルで定義されている「doget」という関数が 実行されるようになっています。 ----------- std::string cmd; std::getline(cin, cmd); void nod::execute(const std::string& cmd) { std::stringstream ss(cmd); std::string command; ss >> command; if (command == "get") { std::string key = "baseball" ; std::string val = stand.doget(key); } } ----------- これを、 以下のように、 (1) C言語側にある「a」という変数にある値を C++側のkeyに流しこんで、 (2) また、C側にあるsign配列内の文字列を C++側の「cmd」に代入したいと思っています。 C側 --------- /* C側の「a」配列の値を、上記C++側の「key」に代入したい */ char a[] = "www.gehohogetest.jp"; /* 上記C++側の「cmd」変数に、C側の配列で定義されている"get"という文字列を代入したい */ char sign[]= "get"; --------- その場合、C側とC+側をどう記述すれば、 希望を叶えることが出来るでしょうか。 アドバイスいただけるとありがたいです。 以上どうぞ宜しくお願い致します。