←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4736

入力数値が重複していた場合の処理について
投稿者---C言語2ヶ月(2005/10/12 16:03:33)


初めて投稿いたします。
現在、C言語を勉強しているのですが、わからない箇所がありますので、ご質問いたします。

現在、キーボードから数値を5件まで入力し、入力された数値を入力と逆順に表示するプログラムを作成しております。
ここで、以前に入力済みの数値が入力された場合、エラーとして数値を再入力させるような処理を加えています。
しかし、この重複チェックがうまくできず、悩んでおります。

現在のソースは、以下の通りです。

#include <stdio.h>

#define INPUT_CNT 5

int main(void)
{
int num[INPUT_CNT];
int cnt1;
int cnt2;

printf("\n");
for(cnt1 = 0 ; cnt1 < INPUT_CNT ; cnt1++)
{
while(1)
{
printf("Input number%d : ",cnt1+1);
scanf("%d",&num[cnt1]);

for(cnt2 = 1 ; cnt2 <= cnt1 ; cnt2++)
{
if(num[cnt2] == num[cnt2-cnt1])
{
printf("\その数値は既に存在しています.\n\n");
break;
}
}
break;
}
}

printf("\n");
for(cnt1 = 0 ; cnt1 < INPUT_CNT ; cnt1++)
{
printf("number%d : %d\n",INPUT_CNT - cnt1,num[INPUT_CNT - cnt1 - 1]);
}

return 0;
}

これでは、重複数値が入力されると、エラーメッセージは表示されるものの、再入力処理がなされません。

どうか、アドバイスをよろしくお願い致します。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:入力数値が重複していた場合の処理について 4737 Blue 2005/10/12 16:18:00
<子記事> Re:入力数値が重複していた場合の処理について 4739 RAPT 2005/10/12 16:32:15


No.4737

Re:入力数値が重複していた場合の処理について
投稿者---Blue(2005/10/12 16:18:00)


数値がかぶっていた場合の状態であるにもかかわらず、2こめのbreakにいってしまっています。

> for(cnt2 = 1 ; cnt2 <= cnt1 ; cnt2++)
> {
>    if(num[cnt2] == num[cnt2-cnt1])
>    {
>        printf("\その数値は既に存在しています.\n\n");
>        break;
>    }
> }
> break;

なので、2こめのbreakになる条件をつけてあげればいいです。

// すべてチェックしてOKだったときfor文よりcnt2がcnt1+1の状態になっている
if ( cnt2 > cnt1 )
{
    break;
}

それと、HNは適当なのにしてください。
"C言語2ヶ月"はあなたの自己紹介ですればいいことです。



この投稿にコメントする

削除パスワード

No.4739

Re:入力数値が重複していた場合の処理について
投稿者---RAPT(2005/10/12 16:32:15)


きちんと字下げしてください。読みにくくて仕方がない。

重複時に、cnt1 をデクリメントするって方法が常套手段だと思います。

while(1)って何? 不要ですよね。何がしたいのか分かりませんでした。
それと、なんか、ループ条件に違和感を感じたので素直な表現に改めました。
# 配列の添え字に複雑な計算式は書かない方が良いです。


#include <stdio.h>

#define INPUT_CNT 5

int main(void)
{
    int num[INPUT_CNT];
    int cnt1;
    int cnt2;

    printf("\n");
    for(cnt1 = 0 ; cnt1 < INPUT_CNT ; cnt1++)
    {
        printf("Input number%d : ", 1 + cnt1);
        scanf("%d", &num[cnt1]);

        for(cnt2 = 0; cnt2 < cnt1 ; cnt2++)
        {
            if(num[cnt1] == num[cnt2])
            {
                printf("その数値は既に存在しています.\n\n");
                cnt1--;
                break;
            }
        }
    }

    printf("\n");
    for(cnt1 = INPUT_CNT - 1 ; cnt1 >= 0 ; cnt1--)
    {
        printf("number%d : %d\n", 1 + cnt1, num[cnt1]);
    }

    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity