数组边界检查和输入验证

时间:2014-05-11 06:59:25

标签: c++ arrays string

我正在用C ++编写刽子手游戏,我想知道如何确保我的第一个用户输入的单词只包含字母字符,没有别的。当他们输入的单词无效时,我必须提示用户输入一个新单词。

我使用的功能可以做到这一点但是对于一些我的检查边界功能不能正常工作。请帮忙,我不知道如何解决它。在我的第一个函数中,我询问用户的输入,然后我使用另一个函数来错误地检查这个单词。 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;
   }

1 个答案:

答案 0 :(得分: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 :: vector,std :: array for arrays(而不是普通的C数组)
  • 用于打印和输入文本的流