0

私はCとプログラミングにかなり慣れていないので、行き詰まり続けています。私は 1 つのプログラムを作成し、それにさらに複雑さを加えて練習しています。

ここで尋ねられた他のいくつかの質問と比較すると、プログラムはかなり単純です。私がしたいのは、数値を入力して、それが 5 より小さいか大きいかを言うことだけです。最近、メニューと Do While ループを追加しました。これが以下のコードです。

#include <stdio.h>

void main ()
{
    int ANumber;
    bool Determine = 1; 
    int MenuChoice; 

    printf("1) Enter a number." "\n2) Exit.\n");
    printf("\nPlease choose an option from the menu above - ");

    scanf("%d", &MenuChoice);       

    if (1 == MenuChoice) {  

        do {
            printf("\nPlease enter a number that is between 0 and 10 - ");
            scanf("%d", &ANumber);          

            if (ANumber == 5)   
                printf("The number you entered is 5.\n");           

            if (ANumber >= 6)
                printf("The number you entered is larger than 5.\n");

            if (ANumber <= 4)
                printf("The number you entered is smaller than 5.\n");

            getchar();
            printf("Would you like to continue? 1 = Yes OR 0 = No - ");     
            scanf("%d", &Determine);    
            return;

        } while (true == Determine);

        if (false == Determine) {   
            return;
        }

    }

    if (2 == MenuChoice)
        return;
}

主な問題は、コードの大部分が正常に動作することです。
ループを終了したいときに問題が発生します。

while (true == Determine);

if (false == Determine) {   
    return;
}

プログラムに 0 を入力すると、次のエラーが表示されます。

Run-Time Check Failure #2 - Stack around the variable 'Determine' was corrupted.

何が問題なのか、このエラー メッセージが何を意味するのかを教えてください。

ありがとう

4

3 に答える 3

1

scanf()ブール データ型を読み取ることができません。boolを使用してa を読み取るための適切な書式指定子はありませんscanf()。使用中に、フォーマット指定子と実際のデータ型が一致しない場合、Undefined Behavior
が発生する ことに注意してください。scanf()

を使用する必要がありintます。

変化する:

bool Determine = 1; 

int Determine = 1; 
于 2012-09-06T10:30:30.937 に答える
0

ヨーダの条件を捨てて、ただ転がしてください

while(Determine)

Cにはブール値がなく、intであるため、これはあなたが書いたとおりに機能します。false は 0 で、true は非ゼロです。

内部の引数が 0 より大きい (false でない) 場合、while、if、for およびそれらすべてが起動します。

また、コードのブロック間で printf を使用して、行き詰まった場所がわかるようにしてください。コードをもう少し適切にフォーマットすれば、バグ(まあemの1つ)に気付くと思います;)

詳細については、こちらをお読みくださいC でのブール値の使用

編集:まあ。

bool Determine = 1; //not even true or false here you're using it as an int

じゃあ後で

scanf("%d", &determine);

bool は 1 バイトで、整数は 4 バイトです。4 バイトを 1 バイトの領域に詰め込むと、bam スタックが破損します。

int Determine = 1;

データサイズに注意し、 sizeof() をいじって、どれだけ大きいかを感じてください。これがCであっても、物事は自動的に他のものにキャストすることはできません:)

于 2012-09-06T10:31:51.863 に答える
-1

0 は false と等しくなく、true は 1 を意味しません。

define のデータ型を bool から int に変更

決定 == 0 または 1 として決定を確認します。

于 2012-09-06T10:33:52.703 に答える