0

コードに問題があります。OPENGL c++ を使用して最終プロジェクトに取り組んでいます。

opengl で 2D シミュレーションに関するコードを作成したいと考えています。私のシミュレーションでは、アプリケーションに表示できるオブジェクトの数をユーザーに入力してもらいます。私の問題は、入力が文字を検出できないことですが、範囲外の場合は数値を検出できます。範囲外の場合のハンドルのコードを作成しました。文字についての範囲は機能しません。

例: 'a' の文字を入力し、エラー処理を表示したい。「maaf, jumlah inputan anda tidak berada dalam range.」のように、数値のみを入力します。

void inputan(){

printf("APLIKASI SIMULASI ANIMASI SEMUT\n\n");

printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
scanf("%f",&input);

if(input > 50 || input < 1){
    ulang();
}

char a = 'a';
int aa=a;
else if(input == aa){
    ulang();
}
}
void ulang(){

printf("---------------------------------------------------\n");

printf("Maaf, jumlah inputan anda tidak berada dalam range.\n");

printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");scanf("%f",&input);

if(input > 50 || input < 1){
ulang();
}
char a = 'a';
int aa=a;
else if(input == aa){
    ulang();
}
}
4

2 に答える 2

1

さて、あなたのコードを見ると、多くの問題があると思います。2D シミュレーションのプログラミングを試みる前に、おそらく C/C++ のマニュアルを読む必要があります。

  • 「else if」は常に「if」ステートメントの一部である必要があります。
  • この場合は安全であっても、暗黙的なキャストは避けてください: int aa=a; //a は char です
  • 「printf」と「scanf」は C ライブラリです。C++ の場合は、cout や cin などのストリームを使用することをお勧めします。
  • 必要でない場合は再帰を避けてください。再帰はメモリの問題を引き起こす可能性があります。
  • 「scanf」と「%f」は浮動小数点用です。この場合、符号なし整数を意味する「%u」を使用する必要があります。

したがって、C でリファクタリングされたコードはおそらく次のようになります。

unsigned int getAntNumber()
{
    unsigned int result=0;
    printf("APLIKASI SIMULASI ANIMASI SEMUT\n\n");
    printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
    while (1!=scanf("%u",&input) || input <1 || input >50)
    {
        printf("---------------------------------------------------\n");
        printf("Maaf, jumlah inputan anda tidak berada dalam range.\n");
        printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
    }
    return result;
}

複数の入力テストを許可するように編集します。

unsigned int getAntNumber()
{
    unsigned int result=0;
    int mustEnd=1; /*C, unlike C++ does not allow bool*/
    printf("APLIKASI SIMULASI ANIMASI SEMUT\n\n");
    printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
    while ( mustEnd != 0)
    {
        if (1!=scanf("%u",&input)) /* Caution, this test must be the first one!*/
        {
            /*Input is not an unsigned integer*/
            printf("---------------------------------------------------\n");
            printf("Maaf, jumlah inputan anda tidak berada dalam range.\n");
            printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
        }
        else if (input <1 || input >50)
        {
            /*Input is out of range*/
            printf("---------------------------------------------------\n");
            printf("Maaf, jumlah inputan anda tidak berada dalam range.\n");
            printf("Silahkan inputkan jumlah semut antara 1 - 50 : ");
        }
        /*You may add easily more tests here*/
        else
        {
            mustEnd=true;
        }
    }
    return result;
}
于 2013-05-08T10:29:46.073 に答える
0

1番目の問題。

C++に関する限り

これは間違っています

if(input > 50 || input < 1){
    ulang();
}

char a = 'a';    //cant declare between if and else if
int aa=a;
else if(input == aa){
    ulang();
}

しかし、これは行うことができます

if(input > 50 || input < 1){
    ulang();
}

char a = 'a';
int aa=a;
if(input == aa){  //no else if but only if. But i don't know if this serves the purpose
    ulang();
}

2番目の問題

scanf("%f",&input);

この行は私たちにとって非常にわかりにくいものです。inputfloat 型のグローバル (ファイル スコープ) 変数の場合は問題ありませんが、入力charsする必要があるため、

scanf("%c",&blah); 

%f指定子を介して文字を入力できないためです。文字を指定して%f scanfも失敗します。

3 番目の問題: 実際に含まれていることを願ってい<cstdio>ます。また使用scanfしないとのことprintf。それらはもう一方の獣 C に属します。

于 2013-05-08T10:30:32.353 に答える