まずはこれを見てください()
#include<stdio.h>
void maxmin(int array[],int max,min);
int main (void)
{
int i=0,array[10],max,min;
do
{
printf("%d番目”i+1);
scanf("%d",&array[i]);
i++;
}while(array[i-1]!=-1);
maxmin(array,&max,&min);
printf("最大値%d,最小値%d\n,max,min);
return 0;
}
void maxmin (int array[],int max,int min);
{
int i=0;
*max=0;
*min=100;
while(array[i]!=-1)
{
if(array[i]>max)max=array[i];
if(array[i]<min)min=array[i];
i++;
}
}
このプログラムが書いてあり疑問に思った点が2つあります。
[1]while(array[i-1]!=-1のところのi-1とはdo~while文では条件式が後判定なため、プログラムが一回は行われるからi-1なのですか?
[2]maxmin関数の呼び出し部分、maxmin(array[],&max,&min)では&max,&minと渡しているのに、maxmin関数での宣言部分の引数が(int max,int min);と書いてあり、ポインターの(int*max,int *min)
でないのはどうしてですか?ポインター引数でないとアドレスが書き換えられないのでは?
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
本気でエラー処理をしだすと「入門」の範疇をはるかに逸脱しちゃうような気しかしませんしね>#4.
printf の返り値のチェック, したことないなぁ....
あとよく見たら maxmin の宣言もおかしい感じがする.
No.5
- 回答日時:
示されているプログラムは、どういう位置づけのものでしょうか?
どこかのHPに例示されたもの?
このプログラムが正しい前提で疑問を持たれているようですが、
疑問を持たれるとおり、変なところがあります。
動かした実績のないプログラムだと思います。
(テキストとして、書いただけという感じがします。)
No.4
- 回答日時:
疑問となっている部分は既に回答があるので、その他のツッコミを。
>printf("%d番目”i+1);
たぶんコピペミスでしょうが、「,」が足りない。
>do
>{
> printf("%d番目”i+1);
> scanf("%d",&array[i]);
> i++;
>}while(array[i-1]!=-1);
バッファオーバーランを実施できるお手本のようなコードです。
11回以上数字を入力しよう!!
# scanf()で数字以外を入力してみるのもいいかも。(まぁ、入門じゃそういうエラー処理省かれるんですけど)
No.3
- 回答日時:
[1] は条件判定の前に i++; が入っているから, だね. 各変数の値がどのように変化するかをじっと追っていけばわかるはず.
i++; をなくしてそのあとの判定を
} while (array[i++] != -1);
にした方がシンプルだけど, 「入門」だとどこで扱おうかねぇ.
[2] は, 「ポインター引数でないとアドレスが書き換えられないのでは?」という文はおかしい (「アドレス」は書き換えられない) けど宣言/定義の部分ではポインタにしないとまずい. まともなコンパイラでは「関数を呼び出す」部分ではエラーにならないと思うけど関数 maxmin の中でエラーが出る.
まあこのままだと main の中でもエラーになる.
No.2
- 回答日時:
> do~while文では条件式が後判定なため、プログラムが一回は行われるからi-1なのですか?
もっと言うと、そのdo~whileの中で、初期値が0だったiをi++してるから。
> ポインター引数でないとアドレスが書き換えられないのでは?
その通りで、まともなコンパイラならエラーにしてくれます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語プログラミングで初項を1....
-
Expression: nptr != NULL
-
加減剰余のオーバーフローについて
-
C言語初心者です。計算がうまく...
-
情報の問題です。 サンプリング...
-
R-C直列回路にLを接続した時の...
-
減衰係数の求め方がわかりません
-
RCフィルタと三角波、方形波
-
火力発電 蒸気タービンのMSV、C...
-
一次遅れ系の制御における時定...
-
「跨川橋」は、「運河に架かる...
-
「寿司(すし)」は名詞とくっ...
-
クレーンでのCFブレーキとな...
-
定常応答 と 強制応答 は同...
-
雑音指数の疑問(その3)・過...
-
半波整流回路と平滑回路の波形...
-
入力容量(Input Capacitance)...
-
古典制御のゲイン交差周波数と...
-
小5算数 変わり方の問題
-
下の画像の問題を解説してくだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語プログラミングで初項を1....
-
プログラミングが分かりません。
-
'printf':識別子が見つかりませ...
-
C言語のエラーについて
-
Expression: nptr != NULL
-
TCP/IP: 非ソケットに対するソ...
-
3×3のラテン方陣をつくるプログ...
-
加減剰余のオーバーフローについて
-
プログラムがエラーが出る原因
-
getch / putch用のヘッダ
-
コマンドライン引数について。
-
C言語で自作ヘッダーを作ったの...
-
コンソールAPIのSetConsoleScre...
-
分割コンパイルの手順と方法に...
-
C言語 コンパイルエラー(文字...
-
リターンキー又は、スペースキ...
-
C言語初心者です。計算がうまく...
-
最も文字数が多い行番号と文字...
-
モンテカルロ法で三角錐の体積...
-
C言語のソースコードについて教...
おすすめ情報