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

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

ただいまの
回答率

87.78%

入力したデータを判定するプログラムを作成したいです

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 630

score 0

実現したいこと

ご覧いただきありがとうございます。
任意の入力したn個のデータから、決めた数以上の数が何個であるか調べるプログラムを作成しております。

質問は以下になります。
調べたい数と基準とする数を実数にしたいのですが、floatにした場合うまくプログラムが作動しません。また、intのときは小さな数では作動してくれるのですが、10個分の判定など大きな数になってくるとうまく作動しません。どこが違うのでしょうか。
この形式のプログラミングは初めてでどのような流れか理解しておきたいです。なのでヒントではなく答えを教えていただけると助かります。
そして、エラーコードからdata[100]の部分が間違っていると思うのですが、組み込んでいるのに使われていないと出てしまうのはどういうことなのでしょう。

ご迷惑おかけしますがお手を伸べていただけると幸いです。
よろしくお願いします。

#include <stdio.h>

int main(void) {
int i,n,a;
float x,j;
float data[100];

printf("データの個数入力 : ");
scanf("%d",&n);
for(i=1;i<n+1;i++){
printf("判定する数値%d : ",i);
scanf("%f",&data[j]);
}

printf("基準の数値入力 : ");
scanf("%f",&x);

a=0;

for(j=0;j<n+1;j++){
if(data[j]>=x){
a+=1;
}
}

printf("%f以上のデータは%d個",x,a);
return 0;
}

発生している問題・エラーメッセージ

prog.c: In function ‘main’:
prog.c:13:25: error: array subscript is not an integer
scanf("%f",&data[j]);
^
prog.c:22:16: error: array subscript is not an integer
if(data[j]>=x){
^
prog.c:7:11: warning: variable ‘data’ set but not used [-Wunused-but-set-variable]
float data[100];

試したこと 

for文の条件の変更
int,floatの変更
文の順番入れ替え
指定するデータの変更
実行データの確認

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

float x,j;
float data[100];

printf("データの個数入力 : ");
scanf("%d",&n);
for(i=1;i<n+1;i++){
  printf("判定する数値%d : ",i);
  scanf("%f",&data[j]);
}

jの値は一切設定されていませんので、data[j]は正しい場所をおそらく指しません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/28 05:06

    コメントありがとうございます。jの値が設定されていないというのは整数ではないからいけないということでしょうか。判定したい数字には少数点以下の数も含まれます。その場合はどう指定すればよいでしょうか。

    キャンセル

  • 2020/07/28 07:05

    > jの値が設定されていないというのは整数ではないからいけないということでしょうか。

    たしかにjが浮動小数点数であるのも適当ではないのですが、それとは別件です。ローカル変数として「float j;」と宣言しただけでは、jの値は「不定」で、そのような変数を参照するコードの動作は未定義(何が起きても文句は言えない≒そんなコードは書いてはいけない)です。

    キャンセル

0

data[j] がエラーですね。 j は整数である必要があるのですが、float x,j;

未使用と言われるのは、上記のエラーの結果。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/28 05:01

    コメントありがとうございます。
    intの方へjを移動させました。ですが、このプログラムは小数点以下を含む数を判別してくれません。どうしたら判定対象に入りますか?

    キャンセル

-1

google翻訳
prog.c:13:25: error: 配列の添え字は整数ではありません

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/28 05:03

    コメントありがとうございます。添え字が整数でないといけないことはわかりました。ですが、小数点以下の桁もある数字も判別したいです。
    その場合はどうすればよいのでしょうか。

    キャンセル

  • 2020/07/28 06:32

    それがなぜ配列の個数が小数点が必要なのか理解できません。
    なにか勘違いしてませんか?

    判定したい数値には小数点が必要であっても、
    判定したい個数は、小数点いりませんよ

    キャンセル

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

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る