我需要使用字符数组验证我的数据“123-AB-12345”是否正确。我设置了一个包括‘\0’在内的大小为13的字符数组。如果条件不满足,该函数必须返回false。但是,问题是当我传入更多的值如“123-AB-123456789”时,程序只会验证前12个字符,而没有返回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);
的意思是读入不超过13个字符到变量book中。后面的句子 "You won't have more characters." 表示不能输入更多的字符。 - Jarod42std::cin
的状态。(打印book
内容以进行调试)。 - Jarod42bookId [12]!= '\ 0'
很好地工作。 创建一个 [mcve]。 - eerorika