2014-05-11 82 views
0

我正在用C++編寫hang子手遊戲,我想知道如何確保我的第一個用戶輸入的單詞只包含字母字符,沒有別的。當他們已經輸入的單詞無效時,我必須提示用戶輸入一個新單詞。陣列邊界檢查和輸入驗證

有我用來做的功能,但對於我的一些檢查邊界功能無法正常工作。請幫助,我不知道如何解決它。在我的第一個函數中,我詢問用戶的輸入,然後使用另一個函數來錯誤檢查這個單詞。 word1是存儲我的第一個單詞的數組,我假設現在這些字母都是小寫。所以我使用字符的ASCII值來確保它位於邊界內。但說如果我輸入45,它確實要求我重新輸入該單詞,但不管它是什麼,第二個單詞都將被接受。它可能是| *%^%它接受它無論如何。

void CheckBound (char word1[], int SIZE1) 
{ 
    int i; 
    int w1[SIZE4]; 
    int found; 
    for (i=0;i<strlen(word1);i++) 
    { 
     w1[i]=(int)word1[i]; 
     if (w1[i] >= 97 && w1[i] <= 122) 
     found=1; 
     else 
     { 
     printf("Please re-enter your word: "); 
     fgets(word1, SIZE1, stdin); 
     word1[strlen(word1)-1]='\0'; 
     printf("%s \n", word1); 
     } 
    } 
    return; 
    } 
+0

根據您的要求,您可以使用'isalpha(w1 [i])',如果需要與'&& islower(w1 [i])'組合使用。你可以在'#include '中找到這兩個函數。 –

回答

0

當您檢測到非字母數字字符時,您仍處於循環遍歷word1的每個字符的第一個循環中。一旦用戶輸入一個新單詞,循環繼續,i!= 0,這當然是不正確的。

試試這個:

oid CheckBound (char word1[], int SIZE1) 
{ 
    int i; 
    bool ok = false; 
    while(!ok) 
    { 
     ok = true; 
     for (i=0;i<strlen(word1);i++) 
     { 
      int c = word1[i]; 
      if (c < 97 || c > 122) 
      { 
       ok = false; 
       break; 
      } 
     } 

     if(!ok) 
     { 
      printf("Please re-enter your word: "); 
      fgets(word1, SIZE1, stdin); 
      word1[strlen(word1)-1]='\0'; 
      printf("%s \n", word1); 
     } 
    } 
} 

順便說一句,這是C,而不是C++。 典型C++使用:

  • 的std :: string代替字符數組/ char指針,用於存儲字符串數組
  • 的std ::矢量,性病::陣列(而不是普通的C陣列)
  • 用於打印和輸入文本的流