【初心者歓迎】C/C++室 Ver.36【環境依存OK】
別にまずくはないけど、inline 関数化しといた方が楽かと。
!! とか書く人もいるけど、最適化されるのかね? これ。
>>951 return var != 0;
でいいじゃん
型は int だが真偽を返すことを意図してあるから
0 と比較するよりは ? : 使った方が読みやすいと思う。
>>953,954
return (var != FALSE);
で解決ですね
それ分かりにくい。二重否定だし。
FALSEはマクロなのでどうも信用できん…。
>>954 0 と比較すると真偽を返すように読めないとでも言うのかね?
if 文は真偽を判別することを意図しているから
if (n != 0) // 0 と比較するよりは
if (n ? true : false) // ? : 使った方が読みやすい
と思う。
それはさすがに読み手を馬鹿にしすぎじゃないか?
>>943 その状況で使えるかどうか判らないけど、
列挙型は、演算子多重定義できるよ。
>>960 馬鹿にしてるとかそういう問題じゃないと思うが。
>>959 読みやすい?
3項演算子より n != 0 の方がよっぽど読みやすいんだが
>>959 if 文に入れる分には if(n) が最良だろう。
馬鹿にしてるとかの問題はともかく、単純にわかりにくいな。
他人の書いたソース中にそんなのが出てきたら一瞬戸惑うかもしれん。
「え、なんか特別な意図でもあるの?」って。
俺は素直に普通の比較式書いてコメント残すよ。
n として数値を期待してるのか真偽値を期待してるのか、
n != 0 だとそれが式から見て取れない。
>>966 は?
nとして数値か真偽値かって
n != 0 の結果が真偽値だろうがよ・・・
bool 型の値という意味じゃなくて、
真か偽かを表しているということだぜ?
というか、流れ分かってるのか?
>>951 から始まってるんだが。
「nが0か否か」
それ以外に何が要るのん?
そもそも元の話は n がintなのになんで n が数値か真偽値かなんて話になってんだ?
is 系関数とか知らない訳じゃないよな?
うん、で?
結局それなら「○か否か」で終了じゃん
972 :
823:2007/05/05(土) 23:11:19
>>824,
>>827 返事遅くなってしまい申し訳ありません。
おかげで上手く動いてくれました。
どうもありがとうございました。
>>971 数値的に見れば 0 か否かだが、
意味的には真か偽を返す関数だろ?
n != 0 だとその意図がここだけからでは見てとれない。
static_cast<bool>(n); でFA
VC++ で警告出た記憶があるぞ
return n == true; とかってやっていいんだっけ?
ダメ。true が (int)1 になって、n が 0 でも 1 でもない時におかしくなる。
bool型の比較でも1以外は駄目なんだ
return !!n;とかやればいいのかな?
>>977 別にダメってことはないだろ。n が 1 じゃない時に false になるってだけで。
比較の結果を 0 or 1 として利用するのはまあアリだと思うが、
true キーワードを数値の 1 の代わりとして使うのはナシだろ。
boolからintはCとの互換のためか問題なしに暗黙でキャストされるはず。
intからboolは情報が落ちるからか手元のコンパイラは警告レベル上げると警告してくれてる。
C++でも if ( ... ) の成立条件はあくまでも0以外のときなんだっけ?
0以外かtrueとはなってないよな?
C++ でも 0 以外。
じゃないと互換性が。
ごめん今みたらスペースか否かを判別する関数で
bool isspace(char c) {
// _ismbcspaceはcが空白文字のときに0を返す
return _ismbcspace(c) == 0;
}
になってた
これならおk?
テンプレートで作成できる型をdoubleとfloatに限定することはできませんか?
doubleとfloatのメソッド実装した方が早くない?
>>973 んなもん関数作ったヤツに言えよ
ifは条件式全体で真偽を表すもんだが
おまえほんとに解ってるか?w
>>984 宣言と定義で別々のファイルに書くようにして
定義側のでで明示的でインスタンス化するときに、doubleとfloatの分だけ書けば
例えばint型等で使おうとしたときにリンカがゴルァしてくれるから
そういうのでよければ
>>989 全部そんな事してたら template の旨味が少ない。
コンストラクタだけそうしたらいいと思うよ。
つまり早くexportキーワードサポートしろやって事ですか?
export は関係ないだろー。
数値から真偽値への変換は true && n っつーのはどうか。
なんでそんな妙なことを…
995 :
デフォルトの名無しさん:2007/05/06(日) 14:22:31
誰か、以下のソースの何処が悪いのか教えてください
因みにポインタとかサッパリです
#include <stdio.h>
int main (void) {
char tall[10],weight[10];
float bmi = *tall / *weight;
printf ("身長を入力して下さい。\n");
gets (tall);
printf ("体重を入力して下さい。\n");
gets (weight);
printf ("%.2f\n",bmi);
return 0;
}
まず整数と英数字の列の違いについて勉強のこと
BMIの求め方も変だし
>因みにポインタとかサッパリです
この時点で論外
もっと根本の勉強をちゃんとしてからで直して来い
>>995 #include <stdio.h>
int main (void) {
float height, weight, bmi;
printf("身長を入力して下さい。\n");
scanf("%f", &height);
printf("体重を入力して下さい。\n");
scanf("%f", &weight);
bmi = weight / height / height;
printf ("%.2f\n", bmi);
return 0;
}
>>995 ポインタ以前に計算は入力がすんでからな
エラー処理はおいといて、getsで文字列取り込んだらatof()で数字にして計算だ。
bmi = atof(tall) / atof(weight);
とかやればいい。
あと、atof()はstdlib.h なのでこれもインクルード
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。