数组边界检查和输入验证

array boundary checking and input validation

本文关键字:验证 输入 检查和 边界 数组      更新时间:2023-10-16

我正在用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]='';
         printf("%s n", word1);
       }
     }
     return;
   }

当检测到非字母数字字符时,仍然在第一个循环中遍历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]='';
            printf("%s n", word1);
        }
    }
}
顺便说一下,这是C,不是c++。典型的c++会使用:
  • std::string代替char数组/char指针存储字符串
  • std::vector, std::array用于数组(而不是普通的C数组)
  • 打印和输入文本流