質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

978閲覧

最大値、最小値の表示

ffrmavemr41

総合スコア18

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/04/16 06:06

前提・実現したいこと

C言語を学習し始めたのですが0以上25以下の数値が入力された場合処理を終了し、入力された数値から最大値、最小値を表示するというプログラムを作成したいのですが行き詰ってしまいました。

エラーメッセージ ```unknown type size ### 該当のソースコード ```C ソースコード

#include <stdio.h>

#define LIMIT_LOW 0
#define LIMIT_HIGH 25

int main(void) {
int max, min ;
int temp ;
int a[] ;
int i ;
int j;

scanf("%d", &temp);
while ( (LIMIT_LOW <= temp) && (temp <= LIMIT_HIGH)) {

if (temp < 0 || temp > 25){ break; } for (i = 0; i++){ a[i] =temp; }; scanf("%d", &temp);

}
max = min = a[0];
for(j=1 ++i){
if (max < a[i])
max = a[i];
if (min > a[i])
min = a[i];
printf("MAX = %d\n", max) ;
printf("MIN = %d\n", min) ;

return 0 ;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2019/04/16 06:11

そもそも配列で取得するモードでもないし、一文字一文字取得したいなら、しっかりと型を合わせる必要が有ります。その辺を理解されているのでしょうか? 後ソースはcodeで囲って下さい。
episteme

2019/04/16 10:50

そのエラーは何行目で出たか明記せよ。てかエラーメッセージを"そのまんま"貼れ。
guest

回答3

0

いくつ入力されるかは分からないが、最終的に持っていないといけないのは、
「入力の中での最小値と最大値」の二つだけです。

ですから入力を貯えるための配列は、必ずしも必要ではないですね。

投稿2019/04/16 06:35

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

少し修正しました。一応これで動きます。ミスがあったら申し訳ございません。
元のソースコードで修正すべき点は、まず配列aのサイズを宣言すること。
最初のwhile文の1ループ目で、tempが初期化されていないため、ランダムな値が入ってしまっている。
次のif文の条件はせっかくなので、LIMIT_LOWとHIGHを使う。
for文の終了条件が書かれていない。

こんな感じだと思います。
配列のサイズを自由に取りたいなら、malloc関数を使うといいと思います。

C

1#include <stdio.h> 2 3#define LIMIT_LOW 0 4#define LIMIT_HIGH 25 5 6int main(void) { 7 int max=0, min=0; 8 int temp ; 9 int a[100] ; 10 int i = 0; 11 int j; 12 13 while(1){ 14 scanf("%d", &temp); 15 if (temp < LIMIT_LOW || temp > LIMIT_HIGH){ 16 break; 17 } 18 a[i++]=temp; 19 } 20 21 max=a[0]; 22 min=a[0]; 23 24 for (j=1; j<=i; j++){ 25 if(a[j]>max){ 26 max=a[j]; 27 } 28 29 if(a[j]<min){ 30 min=a[j]; 31 } 32 } 33 34 35 printf("MAX = %d\n", max) ; 36 printf("MIN = %d\n", min) ; 37 38 return 0 ; 39} 40

投稿2019/04/16 06:31

編集2019/04/16 06:44
witchy

総合スコア74

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

witchy

2019/04/16 06:49

他の方が仰っている通り、最大値最小値だけを求めるなら、while文内で、max、minの更新を行ったほうがコンパクトになりますね。
guest

0

int a[] の配列ですが、配列の数が分からないので、エラーとなりますね。
とりあえず、int a[25]; にしてみてはどうですか?

ただし、コンパイルエラーはまだ出ますし、ロジックにも誤りがあるので
そこは修正してください。

投稿2019/04/16 06:21

MAKOTO_MOBY

総合スコア193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問