【初心者歓迎】C/C++室 Ver.36【環境依存OK】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/05/05(土) 20:30:45
別にまずくはないけど、inline 関数化しといた方が楽かと。
!! とか書く人もいるけど、最適化されるのかね? これ。
953デフォルトの名無しさん:2007/05/05(土) 21:19:52
>>951
return var != 0;
でいいじゃん
954デフォルトの名無しさん:2007/05/05(土) 21:24:03
型は int だが真偽を返すことを意図してあるから
0 と比較するよりは ? : 使った方が読みやすいと思う。
955デフォルトの名無しさん:2007/05/05(土) 21:25:46
>>953,954
return (var != FALSE);
で解決ですね
956デフォルトの名無しさん:2007/05/05(土) 21:27:52
それ分かりにくい。二重否定だし。
957デフォルトの名無しさん:2007/05/05(土) 22:01:42
FALSEはマクロなのでどうも信用できん…。
958デフォルトの名無しさん:2007/05/05(土) 22:08:29
>>954
0 と比較すると真偽を返すように読めないとでも言うのかね?
959デフォルトの名無しさん:2007/05/05(土) 22:10:35
if 文は真偽を判別することを意図しているから

if (n != 0) // 0 と比較するよりは

if (n ? true : false) // ? : 使った方が読みやすい

と思う。
960デフォルトの名無しさん:2007/05/05(土) 22:25:51
それはさすがに読み手を馬鹿にしすぎじゃないか?
961デフォルトの名無しさん:2007/05/05(土) 22:26:39
>>943
その状況で使えるかどうか判らないけど、
列挙型は、演算子多重定義できるよ。
962デフォルトの名無しさん:2007/05/05(土) 22:30:07
>>960
馬鹿にしてるとかそういう問題じゃないと思うが。
963デフォルトの名無しさん:2007/05/05(土) 22:45:44
>>959
読みやすい?
3項演算子より n != 0 の方がよっぽど読みやすいんだが
964デフォルトの名無しさん:2007/05/05(土) 22:50:37
>>959
if 文に入れる分には if(n) が最良だろう。
965デフォルトの名無しさん:2007/05/05(土) 22:51:52
馬鹿にしてるとかの問題はともかく、単純にわかりにくいな。
他人の書いたソース中にそんなのが出てきたら一瞬戸惑うかもしれん。
「え、なんか特別な意図でもあるの?」って。
俺は素直に普通の比較式書いてコメント残すよ。
966デフォルトの名無しさん:2007/05/05(土) 22:52:35
n として数値を期待してるのか真偽値を期待してるのか、
n != 0 だとそれが式から見て取れない。
967デフォルトの名無しさん:2007/05/05(土) 22:53:57
>>966
は?
nとして数値か真偽値かって
n != 0 の結果が真偽値だろうがよ・・・
968デフォルトの名無しさん:2007/05/05(土) 22:55:56
bool 型の値という意味じゃなくて、
真か偽かを表しているということだぜ?
というか、流れ分かってるのか?
>>951 から始まってるんだが。
969デフォルトの名無しさん:2007/05/05(土) 22:58:15
「nが0か否か」
それ以外に何が要るのん?
そもそも元の話は n がintなのになんで n が数値か真偽値かなんて話になってんだ?
970デフォルトの名無しさん:2007/05/05(土) 22:59:31
is 系関数とか知らない訳じゃないよな?
971デフォルトの名無しさん:2007/05/05(土) 23:08:18
うん、で?
結局それなら「○か否か」で終了じゃん
972823:2007/05/05(土) 23:11:19
>>824,>>827
返事遅くなってしまい申し訳ありません。
おかげで上手く動いてくれました。
どうもありがとうございました。
973デフォルトの名無しさん:2007/05/05(土) 23:15:26
>>971
数値的に見れば 0 か否かだが、
意味的には真か偽を返す関数だろ?
n != 0 だとその意図がここだけからでは見てとれない。
974デフォルトの名無しさん:2007/05/06(日) 00:54:04
static_cast<bool>(n); でFA
975デフォルトの名無しさん:2007/05/06(日) 01:08:43
VC++ で警告出た記憶があるぞ
976デフォルトの名無しさん:2007/05/06(日) 01:13:14
return n == true; とかってやっていいんだっけ?
977デフォルトの名無しさん:2007/05/06(日) 01:29:55
ダメ。true が (int)1 になって、n が 0 でも 1 でもない時におかしくなる。
978デフォルトの名無しさん:2007/05/06(日) 01:40:36
bool型の比較でも1以外は駄目なんだ
return !!n;とかやればいいのかな?
979デフォルトの名無しさん:2007/05/06(日) 01:40:42
>>977
別にダメってことはないだろ。n が 1 じゃない時に false になるってだけで。
980デフォルトの名無しさん:2007/05/06(日) 01:52:07
比較の結果を 0 or 1 として利用するのはまあアリだと思うが、
true キーワードを数値の 1 の代わりとして使うのはナシだろ。
981デフォルトの名無しさん:2007/05/06(日) 02:02:59
boolからintはCとの互換のためか問題なしに暗黙でキャストされるはず。
intからboolは情報が落ちるからか手元のコンパイラは警告レベル上げると警告してくれてる。

C++でも if ( ...  ) の成立条件はあくまでも0以外のときなんだっけ?
0以外かtrueとはなってないよな?
982デフォルトの名無しさん:2007/05/06(日) 02:12:54
C++ でも 0 以外。
じゃないと互換性が。
983デフォルトの名無しさん:2007/05/06(日) 06:17:45
ごめん今みたらスペースか否かを判別する関数で
bool isspace(char c) {
// _ismbcspaceはcが空白文字のときに0を返す
return _ismbcspace(c) == 0;
}
になってた
これならおk?
984デフォルトの名無しさん:2007/05/06(日) 06:19:09
テンプレートで作成できる型をdoubleとfloatに限定することはできませんか?
985デフォルトの名無しさん:2007/05/06(日) 08:03:05
doubleとfloatのメソッド実装した方が早くない?
986デフォルトの名無しさん:2007/05/06(日) 08:08:00
>>984
boost::enable_if<> を使えばできるけど、以下 >>985
987デフォルトの名無しさん:2007/05/06(日) 08:16:42
>>983
何を心配しているのかわからん。
988デフォルトの名無しさん:2007/05/06(日) 08:44:53
>>973
んなもん関数作ったヤツに言えよ
ifは条件式全体で真偽を表すもんだが
おまえほんとに解ってるか?w
989デフォルトの名無しさん:2007/05/06(日) 09:00:41
>>984
宣言と定義で別々のファイルに書くようにして
定義側のでで明示的でインスタンス化するときに、doubleとfloatの分だけ書けば
例えばint型等で使おうとしたときにリンカがゴルァしてくれるから
そういうのでよければ
990デフォルトの名無しさん:2007/05/06(日) 10:50:09
>>989
全部そんな事してたら template の旨味が少ない。
コンストラクタだけそうしたらいいと思うよ。
991デフォルトの名無しさん:2007/05/06(日) 11:01:35
つまり早くexportキーワードサポートしろやって事ですか?
992デフォルトの名無しさん:2007/05/06(日) 11:25:24
export は関係ないだろー。
993デフォルトの名無しさん:2007/05/06(日) 11:50:39
数値から真偽値への変換は true && n っつーのはどうか。
994デフォルトの名無しさん:2007/05/06(日) 12:02:30
なんでそんな妙なことを…
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;
    }
996デフォルトの名無しさん:2007/05/06(日) 14:26:49
まず整数と英数字の列の違いについて勉強のこと

BMIの求め方も変だし
997デフォルトの名無しさん:2007/05/06(日) 14:31:34
>因みにポインタとかサッパリです
この時点で論外

もっと根本の勉強をちゃんとしてからで直して来い
998デフォルトの名無しさん:2007/05/06(日) 14:32:34
>>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;
}
999デフォルトの名無しさん:2007/05/06(日) 14:32:46
>>995
ポインタ以前に計算は入力がすんでからな
エラー処理はおいといて、getsで文字列取り込んだらatof()で数字にして計算だ。
bmi = atof(tall) / atof(weight);
とかやればいい。
あと、atof()はstdlib.h なのでこれもインクルード
1000デフォルトの名無しさん:2007/05/06(日) 14:42:01
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。