c++ - C++ 中的字符数组验证

标签 c++ arrays validation input

我必须使用字符数组验证我的数据“123-AB-12345”是否正确。我将字符数组大小设置为 13,包括 '\0'。如果不满足条件,该函数必须返回 false。我所做的就是程序验证这 12 个字符,但当我传递更多值(例如“123-AB-123456789”)时,它不会返回 FALSE,并且它会返回 true。我的程序如下:

#include<iostream>
using namespace std;
bool isValidBookId(char bookId[13]);
int main()
{
    char book[13];
    cin.getline(book,13);
    bool id = isValidBookId(book);
    cout<<id;
}
bool isValidBookId( char bookId[13] ) {
    /* Valid:  098-EN-98712   */
    if ( bookId[12] != '\0' )
        return false;
    if ( bookId[3] != '-' )
        return false;
    if ( bookId[6] != '-' )
        return false;

    for ( int i = 0; i < 3; i++ ) {
        if ( bookId[i] < '0' || bookId[i] > '9' ) {
            return false;
        }
    }
    for ( int i = 4; i < 6; i++ ) {
        if ( bookId[i] < 'A' || bookId[i] > 'Z' ) {
            return false;
        }
    }
    for ( int i = 7; i < 12 || bookId[12]!='\0'; i++ ) {
        if(bookId[13]!='\0'){
            return false;
        }
        if ( bookId[i] < '0' || bookId[i] > '9' ) {
            return false;
        }
    }

    return true;
}

我不知道为什么这个条件不起作用。

 if ( bookId[12] != '\0' )
        return false;

最佳答案

查看您的代码,唯一的解释是数组的最后一个字符为空。尝试指定如下分隔符:

cin.getline(book, 13, '\n');

我会引用这个link :

“如果 n 大于零,即使提取了空字符串,空字符 ('\0') 也会自动附加到写入的序列中。”

关于c++ - C++ 中的字符数组验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59604661/

相关文章:

c++ - 如何在 C++ 中初始化对象的空数组?

c++ - 如何在C++中创建一个n行5列的数组,但是n的值是变化的

c++ - 如何处理SIGINT?

javascript - 根据数组或对象项的数量设置背景图像

Javascript forEach 方法适用于 NodeList

c# - 将负值转换为 0

.net - 如何在数据绑定(bind)场景(即 BindingList)中验证自定义对象的属性?

c++ - 相对于相机位置绘制

android - 在 Eclipse 中使用数组向画廊图像添加声音

javascript - 验证文本框并运行另一个函数 javascript