配列を用いた点数ごとのランクわけ(?)について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KINDEЯ

配列を用いた点数ごとのランクわけ(?)について

#1

投稿記事 by KINDEЯ » 12年前

こんばんは。
専門学校の課題で分からない問題があり困っています。


以下の問題です。

点数を10点幅をランクに分け、その幅に何人いるかをカウントするプログラムを作成しなさい。
Ctrl+Zを入力することでキーボード入力を終了させる。
以下の配列を使用すること。
int count[11];  //点数カウントエリア

<実行結果>
点数を入力して下さい
25
56
65
80
73
66
^Z  ←Ctrl+Zを入力すると左のようになる。
*******点数別分布表*******
0 : 0
10 : 0
20 : 1
30 : 0
40 : 0
50 : 1
60 : 2
70 : 1
80 : 1
90 : 0
100: 0

Ctrl+Zを判定する方法が分かりません・・。

現在のソースコードです。

コード:

#include "stdio.h"

int main(void)
{
	int count[11] = {0};
puts("点数を入力して下さい");
	while(count[i] != '^Z'){
		scanf("%d", &count[i]);
		i++;
	}
	return 0;
}

box
記事: 2002
登録日時: 14年前

Re: 配列を用いた点数ごとのランクわけ(?)について

#2

投稿記事 by box » 12年前

もしかすると、EOF かどうかを判断するとうまくいくのではないか、
と勝手に想像しています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

KINDEЯ

Re: 配列を用いた点数ごとのランクわけ(?)について

#3

投稿記事 by KINDEЯ » 12年前

解答ありがとうございます!

コード:

while(scanf("%d", &count[i]) != EOF)	i++;
としてみたのですが、Ctrl+Zで処理も止まり、数字を入力した場合はループが回るのですが、
文字列を入力すると固まってしまいます・・。
何が原因なのでしょうか・・。

アバター
little
記事: 44
登録日時: 13年前
連絡を取る:

Re: 配列を用いた点数ごとのランクわけ(?)について

#4

投稿記事 by little » 12年前

KINDEЯ さんが書きました:

コード:

while(scanf("%d", &count[i]) != EOF)	i++;
"%d"で文字を入力すると、無限ループします。

► スポイラーを表示
テストコードを書いてみたので良かったらどうぞ(´・ω・`)
百聞は~

non
記事: 1097
登録日時: 14年前

Re: 配列を用いた点数ごとのランクわけ(?)について

#5

投稿記事 by non » 12年前

KINDEЯ さんが書きました:解答ありがとうございます!

コード:

while(scanf("%d", &count[i]) != EOF)	i++;
としてみたのですが、Ctrl+Zで処理も止まり、数字を入力した場合はループが回るのですが、
文字列を入力すると固まってしまいます・・。
何が原因なのでしょうか・・。
数字以外の文字列が入力されることも考慮が必要という事でしょうか。
もしそうなら、一旦文字列として取り込み、数値に変換するようにします。
non

かずま

Re: 配列を用いた点数ごとのランクわけ(?)について

#6

投稿記事 by かずま » 12年前

コード:

#include <stdio.h>

#define N  5

int main(void)
{
    int i, n, data[N + 1];

    for (n = 0; n <= N; n++)
        if (scanf("%d", &data[n]) != 1)
            break;
    if (n > N)
        printf("データが多すぎる\n");
    else if (n == N)
        for (i = 0; i < n; i++)
            printf("%d\n", data[i]);
    else if (feof(stdin))
        printf("データが足りない\n");
    else
        printf("数字ではない\n");
    return 0;
}
このプログラムで、入力データが 5個の場合、
6個の場合、4個の場合、数字でないものがある、
というテストをしてみるとどうなりますか?

閉鎖

“C言語何でも質問掲示板” へ戻る