2013-05-08 2 views
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(); 
} 
} 
+0

나는 당신의 문제를 이해할 수 있을지 잘 모른다 : - 단지 float [1-50] 만 허용하고 싶습니까? –

+0

이전 버전이 없으면 어떻게 사용할 수 있습니까? 당신은 보여준대로 할 수 없습니다. –

답변

1

음, 코드를 찾고, 나는 문제가 SI 많이 생각합니다. 2D 시뮬레이션을 프로그래밍하기 전에 C/C++ 매뉴얼을 읽어야합니다.

  • "else if"는 항상 "if"구문의 일부 여야합니다.
  • 이 경우에도 안전하지 않더라도 암시 적 캐스팅을 피하십시오. int aa = a; // a는 char입니다
  • "printf"와 "scanf"는 C 라이브러리입니다. C++에서는 cout과 cin과 같은 스트림을 사용하는 것이 좋습니다.
  • 필요하지 않은 경우 재귀를 피하십시오. 재귀는 메모리 문제를 일으킬 수 있습니다.
  • "% f"이 (가) "scanf"이면 float이고, 경우에 따라 부호없는 정수를 의미하는 "% u"를 사용해야합니다.

그래서 C에서 refactorized 코드는 아마 찾습니다

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; 
} 
+0

감사합니다,하지만, 두 가지 오류 처리를 감지 할 수있는 방법 .. 예를 들면 : 나는 범위 번호를 벗어난 입력, 프로그램은 오류 처리를 출력하고 다음 문자와 동일하게 출력 할 수 있습니다. –

+0

"% u"를 사용하면 scanf는 부호없는 정수가 필요합니다. 예를 들어 char을 입력하면 scanf는 1 대신 0을 반환합니다. 입력에 대해 다른 테스트를 허용하도록 코드를 편집합니다. .... 주 : 에러 처리는 테스트 입력하는 동일하지 않은 오류 처리 뛰어난 오류 표기, 사용자의 응답 입력 에러는 매우 일반적이며, 통상의 실행 라인으로 처리되어야한다. –

0

1 문제.

는 지금까지 C++와 같은 문제는이 라인은 매우이다

scanf("%f",&input); 

잘못

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 문제를 수행 할 수있다

우려 우리에게 애매한. input는 float 형의 글로벌 (파일 범위) 변수 인 경우 다음의 확인을하지만 당신은 당신이 %f 지정을 통해 문자를 입력 캔트 때문에

scanf("%c",&blah); 

이 필요 chars 입력하려는 때문이다. 문자를 쓰지만, %fscanf이되면 실패합니다.

세 번째 문제 : 실제로는 <cstdio>을 포함하시기 바랍니다. 또한 scanfprintf을 사용하지 마십시오. 그들은 다른 짐승에 속해있다.