2013-05-08 71 views
0

我的代碼有問題。我正在使用OPENGL C++工作我的最終項目。處理文本輸入的問題

我想在opengl中創建一個關於模擬2D的代碼。在我的模擬中,我要求用戶輸入可以在應用程序中顯示多少個對象。我的問題是輸入無法檢測字符,但可以檢測超出範圍的數字。如果超出範圍,我會爲句柄創建一個代碼,範圍關於字符而不是函數。

例如: 我輸入字符'a',想顯示錯誤處理。像「maaf,jumlah inputan anda tidak berada達拉姆範圍」,所以只輸入數字。

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

我不太瞭解你的問題: - 你想只允許浮動[1-50]? – 2013-05-08 10:11:04

+0

如果沒有以前,你怎麼能使用其他的?你不能像你所顯示的那樣去做。 – 2013-05-08 10:13:12

回答

1

好吧,看你的代碼,我認爲有很多問題。您可能應該在閱讀C/C++手冊之前嘗試編程2D模擬。

  • 「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

謝謝先生,但是,如何檢測出兩個錯誤處理。例如: 例如:我輸入了超出範圍的數字,程序可以輸出錯誤處理,然後與字母一樣。 – 2013-05-09 07:59:39

+0

對於「%u」,scanf期望得到一個無符號整數。如果輸入例如char,scanf將返回0而不是1. 我將編輯代碼以允許對輸入進行不同的測試。 .... 注意:錯誤處理與測試輸入不同:錯誤處理應用於出現異常錯誤,用戶輸入錯誤非常常見,應在正常執行行中處理。 – 2013-05-09 09:50:50

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

第二個問題

scanf("%f",&input); 

這條線是一個非常對我們模糊不清。如果input是一個float類型的全局(文件範圍)可變那麼它的好,但因爲你要輸入chars你需要有

scanf("%c",&blah); 

,因爲你通過%f符不能輸入的字符。如果你給字符,但有%fscanf將失敗。

第三個問題:其實我希望你已經包括了<cstdio>。此外不要使用scanfprintf。他們屬於另一個野獸C.