VC++6のユーザーです。
一般の数式だと、A÷B=C余りDの時、
D = A Mod B;
と言う書き方でいいはずなのだけど、
“Modの前に;が要ります。”
とか言うコンパイル・エラーが出て、
Modそのものを認識していないようです。
(確かに、VCのMSDNなどを見ると、
”Modは使えます。”とは
書いてはあるのだけど、今イチ、
使い方の記述が不明確。)
D = A % B;
# たいていの参考書に書かれているハズですが
% です
Modが使えるのは Visual Basic じゃなかったかな。
C/C++においては、上のお二方がおっしゃるとおりです。
>(確かに、VCのMSDNなどを見ると、
> ”Modは使えます。”とは
> 書いてはあるのだけど、今イチ、
> 使い方の記述が不明確。)
本当ですか!?
と思いMSDN調べた所、.NetFrameWork内にありましたね。
これはMSの用意した.Netライブラリの機能であって、C++標準の機能ではありません。
普通は上のお二人がいってますように%演算子を使います。
MSDNで%演算子で見れますよ。
こんなのありました、MSDN(2003年4月)一部引用
------------------------------------------------------------------------------
div 関数は、
numer を denom で割り、商および剰余を求めます。
div_t 構造体は、商 int quot および剰余 int rem で構成されています。
商の符号は、算術上の商の符号と同じです。
商の絶対値は、算術上の商の絶対値より小さい最大の整数です。
分母が 0 の場合、プログラムは終了し、エラー メッセージが表示されます。
---------------------------
必要条件
ルーチン 必須ヘッダー 互換性
div <stdlib.h> ANSI、Win 98、Win Me、Win NT、Win 2000、Win XP
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してくださ
い。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
------------------------------------------------------------------------------
modをキーワードにVC++に該当する機能のものは見つかりませんでしたけど
VC6のMSDNならなおさら、探せませんでしたけど
C90 においては % や / での除算は除数被除数の片方または両方が負であるとき
その結果は処理系定義とされています。
-1/2 は 0 ... -1 となるかまたは -1 ... 1 となるか、どちらかになります。
# VC++6 は(というか ix86 は) 前者。
C99 では整数商を 0 方向に切り捨てることになりました(先の例では前者)
http://seclan.dll.jp/c99d/
C90 で、ソースコードの完全互換を保ちつつ、負数の剰余を求めたいのであれば
% で割ってはダメで div() または ldiv() を使う必要があります。
# とか言いつつ後者の結果を出す処理系は見たこと無いなぁ。
皆さん、いろいろ参照になる意見ありがとうございました。
Modは、Basicだけで使えるのですね。
いちいち割ってみて、Int型に入れて、再度かけてみて、
元の値と同じになるか、と言う馬鹿なことをやっていましたが、
もうやめます。
VC++6で使っているので、%がいいようです。
浅学だったので、覚えておきます。
ありがとうございました。
もし、C言語とかC++言語の知識が怪しいようなら、
言語の入門書を一冊かって少なくとも一度は通読した方が良いです。
まあ、一度読めば終わりと言う物ではありませんが、
後で確かこの内容はこの本にあったような程度でも頭に残っていれば、
また本を読み直せばいいだけの話なのでそれだけでもずいぶん違います。
プログラミングに近道無しと言うのが私の考えです。
基礎知識が足りない状態で突っ走ってもハマル部分が多すぎて
かえって苦戦しますし、勘違いして覚えてしまうと後で軌道修正が
大変なので少々退屈でも基礎知識の習得を優先した方が効率が良いです。
因みにVC++の本を買って読んでもC言語やC++言語の入門書の代わりには
なりません。
VC++の本とは別に言語の入門書がいると考えてください。