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 是一个字符
  • “printf”和“scanf”是 C 库,对于 C++,最好使用 cout 和 cin 等流。
  • 如果没有必要,请避免递归:递归可能会导致内存问题。
  • 带有“%f”的“scanf”用于浮点数,在您的情况下,您必须使用表示无符号整数的“%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

第一个问题。

就 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();
}

第二个问题

scanf("%f",&input);

这条线对我们来说是非常模糊的。如果input是浮点类型的全局(文件范围)变量,则可以,但是由于您要输入chars,因此需要

scanf("%c",&blah); 

因为你不能通过%f说明符输入字符。如果你给字符但有%f scanf会失败。

第三个问题:其实我希望你已经包括在内<cstdio>。而且不要使用scanfand printf。它们属于另一只野兽 C.

于 2013-05-08T10:30:32.353 回答