
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
負にしたくない、とのことですが、それはあなたが思っているところとは全く別の問題です。
まず、if(--a>0)の--a>0が偽になるのはaがもともと"1"である時です。aが1の時--aは0となり--a>0は偽となります。
aが1ずつ減っていてすべての処理が終わった後にaが負になっているということはi(--a>0)はすくなくとも2回は偽と判定されているはずです。(もともと1であるときと0であるとき)
勘違いしているのは言うまでもないのですが、それ以外の場所でも間違っているはずです。この処理を行ってる部分のすべてを見せてもらわないと何が間違っているのか確認のしようがありません。

No.3
- 回答日時:
No2のかたも言われていますが、それを確認するための、試験です。
--------------------------------------
#include <stdio.h>
int main(void)
{
int i;
int a;
a = 3;
for (i=1;i<10;i++){
printf("----- %d回目 --------\n",i);
printf("判定前 a=%d\n",a);
if (--a>0){
printf("判定中 a=%d\n",a);
}
printf("判定後 a=%d\n",a);
}
}
---------------------------------------------
上記を実行すると
----- 1回目 --------
判定前 a=3
判定中 a=2
判定後 a=2
----- 2回目 --------
判定前 a=2
判定中 a=1
判定後 a=1
----- 3回目 --------
判定前 a=1
判定後 a=0
----- 4回目 --------
判定前 a=0
判定後 a=-1
----- 5回目 --------
判定前 a=-1
判定後 a=-2
----- 6回目 --------
判定前 a=-2
判定後 a=-3
----- 7回目 --------
判定前 a=-3
判定後 a=-4
----- 8回目 --------
判定前 a=-4
判定後 a=-5
----- 9回目 --------
判定前 a=-5
判定後 a=-6
のようになります。
つまりif (--a>0)が成立するか否かにかかわらず、無条件に毎回aから1が減算されていることが確認できます。
if (--aa > 0) とか if (a++ > 0)とかのような
if 文の中で、++,--の演算子を使うのはやめたほうが良いです。
私自身、実際の業務でも、if 文の中で、++,--の演算子を使ったケースはありません。(使わなくても何の問題もありません)
これを使うと、ほかの人が、このソースを見たときに、混乱します。
業務で書いたプログラムは、いずれほかの人が、そのプログラムのメンテナンスをすることになります。
その為にも、第三者にもわかりやすいプログラムを書くということは、非常に大切なことです。
No.2
- 回答日時:
if(--a>0)は、
a = a-1;
if(a>0)
と同じ意味
if(a>0) {--a; ~~ }
と違うのはわかるでしょ?
他の方も仰っていますが、よくわからない内は
--aという書き方はしない方が良いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAのifで 4 2023/05/16 14:21
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) vba 最大値 条件分岐 4 2022/12/10 10:20
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) 勤務表ですが、思うように出来ません。 3 2023/05/19 06:43
- Excel(エクセル) EXCELのif文をifs文に変換したい 1 2022/09/22 16:42
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者です。for文、if文を使っ...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
C言語の二分法のプログラムにつ...
-
計算結果がlong型以上になる場...
-
構文エラー";"が型の前にあり...
-
if(--a>0)は aは毎回-1されると...
-
直角三角形を表示するプログラム
-
C言語 マスターマインドゲーム...
-
C言語についてですfor ifをつか...
-
c言語 プログラム
-
c言語のwhile文を使った計算で...
-
「Aに対するBの割合」と「Aに対...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
java初心者です。入力されたの...
-
Enterキーを押されたら次の処理...
-
Aの値からBの値を除するとは??
-
「指定されたキャストは有効で...
-
ある商品のロス率を5%見込み、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
初心者です。for文、if文を使っ...
-
配列を関数に渡す方法
-
C言語 マスターマインドゲーム...
-
C言語 入力した数値の平均値の...
-
C言語の二分法のプログラムにつ...
-
配列を使って魔方陣
-
scanf関数を用いての加減乗除%...
-
10進数からN進数に変換するプロ...
-
c言語のwhile文を使った計算で...
-
全角文字の判定
-
C言語 数字以外を入力させない...
-
プログラミングで二番目に大き...
-
while文を使った問題なのですが...
-
getcの改行判定
-
C言語
-
c言語で平均をだす
おすすめ情報