处理文本输入的问题

时间:2013-05-08 09:59:57

标签: c

我的代码有问题。我正在使用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();
}
}

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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是float类型的全局(文件范围)变量,那么它可以,但是因为你想输入chars,你需要

scanf("%c",&blah); 

因为您无法通过%f说明符输入字符。如果您提供字符但%f scanf会失败。

第3个问题:实际上我希望你已经加入了<cstdio>。此外,请勿使用scanfprintf。他们属于另一个野兽C.