【问题标题】:array boundary checking and input validation数组边界检查和输入验证
【发布时间】:2014-05-11 06:59:25
【问题描述】:

我正在用 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;
   }

【问题讨论】:

  • 您可以使用isalpha(w1[i]),如果需要,可以根据您的要求与&amp;&amp; islower(w1[i])结合使用。您可以在#include &lt;cctype&gt; 中找到这两个函数。

标签: c++ arrays string


【解决方案1】:

当您检测到非字母数字字符时,您仍在第一个循环中迭代 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 数组/char 指针来存储字符串
  • std::vector、std::array 用于数组(而不是普通的 C 数组)
  • 用于打印和输入文本的流

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多