C ++代码在验证后不断崩溃

C++ Code keeps crashing after a validation

我写了一段代码来验证一个关键字,它验证并确保这个词是 5 个字母长的,而且都是字母,里面没有数字。但是,当我 运行 它时,代码似乎完全停止工作并且没有提示我下一个问题,我已经在没有这段代码的情况下对其进行了测试,这部分代码就是问题所在,因为它没有它也能正常工作。

代码:

            cout<<name1<<", please enter the keyword (5 characters): "<<endl;
            cin>>key;
            for(int i = 0; i < keylength; i++){
                if(isalpha(key[i]) == 1){
                    validnum += 1;
                }
            }
            if(validnum == keylength && key.length() == keylength){
                validated = true;
            }
            else{
                validated = false;
            }

在 for 循环之前,您需要检查 key.length() 是否等于 keyLength。否则,当用户输入长度小于 keyLength.

的字符串时,循环会调用未定义的行为

另外函数isalpha不需要returns 1。它可以return任何正值。

像下面这样更改您的代码

validated = key.length() == keyLength;

if ( validated )
{
    size_t i = 0;

    while ( i < keyLength && isalpha( ( unsigned char )key[i] ) ) ++i;

    validated = i == keyLength;
}

如评论中所述,无需任何循环来确定密钥是否为 5 个字符且全部为字母。

使用 std::all_of 将测试所有字符是否都是字母:

#include <algorithm>
#include <string>
#include <cctype>
#include <iostream>

bool isValidData(const std::string& key)
{
   return key.size() == 5 && std::all_of(key.begin(), key.end(), ::isalpha);
}
    
int main()
{
   //Test data  
   std::string testKeys[] = {"1abcdef", "abcde", "abcdefghijkl", "a", "xyzab"};

   for (size_t i = 0; i < std::size(testKeys); ++i)
   { 
       // Output results
       std::cout << testKeys[i] << " " << (isValidData(testKeys[i])?"OK":"BAD") << "\n";
   }
}

输出:

1abcdef BAD
abcde OK
abcdefghijkl BAD
a BAD
xyzab OK

此外,如果您查看了您的代码,如果没有 运行 代码,则不清楚代码的目标是什么。将其与函数 isValidData 进行比较:如果您说出该函数中包含的内容,它看起来几乎与您的描述相同:

“密钥大小必须为 5,并且所有字符都必须为字母”。