前提
テンプレートを勉強して、簡単な足し算ができるコードを書いてみました。
二つのデータタイプと計算したい二つの値を入力して、一つ目のデータタイプのところで-1を入力するとwhileから抜け出す。と言うようなコードを完成させたいです。
ただ、『-1を入力するとwhileから抜け出す』
ここのインプットをどのように書いていいかわからず、永遠にwhileループから抜け出せないコードになってしまいました。
実現したいこと
data_type1に-1をインプットして、ループから抜け出したい。
該当のソースコード
C++
1#include<iostream> 2using namespace std; 3 4 5template <typename T> 6T add (T x, T y); 7 8template <typename T> 9T add (T x, T y){ 10 return (x + y); 11} 12 13 14 15int main() { 16 double x,y; 17 char data_type1[55]; 18 char data_type2[55]; 19 while(cin>>data_type1>>x>>data_type2>>y) { 20 21 cout << "Sum: " << add<double>(x,y) << endl; 22 23 } 24 25 return 0; 26} 27 28 29 30 31 32 33 34
試したこと
C++
1 while(cin>>data_type1) { 2 if(data_type1!="-1"){ 3 cin>>x>>data_type2>>y; 4 cout << "Sum: " << add<double>(x,y) << endl; 5} 6 else 7 break; 8 }
while文のインプットのところを一つ目のデータタイプの配列のみにして、その配列が-1だった場合は、一つ目の値から二つの値まで入力しないと言うようなコードになるように書いてみたのですが、-1を入力してもwhileから抜け出せません。
補足情報(FW/ツールのバージョンなど)
インプットの例は
int 4 float 6.1
アウトプット例は
Sum: 10.1
また、-1をインプットした場合は何もアウトプットされません。
C言語の文字列(char[])は、単純比較では比較できません。
data_type1!="-1"
は、『data_type1配列の先頭アドレス』と、『何処かに確保された"-1"という文字列が格納されたアドレス』との比較になります。
なので、当然、否となりますな。
data_type1がstd::string型だと、ソレで比較できるかもしれませんが。
おっと、!=なので否定でしたな。
ということで、ここのif文での判定は常に真です。
あと…"-1"という文字列と、EOFは異なります。
eof(EOF)が多くの系で-1という数値のマクロ定義になっているというのは言えますが、文字列"-1"(つまり'-' '1' '\0'の配列)がeof(EOF)とみなされることはありません。
数値/文字/文字列の関係をきっちりと整理しましょう。
回答3件
あなたの回答
tips
プレビュー