2016-07-30 8 views
-8
#include <iostream> 
#include <string> 

using namespace std; 
bool custNum(char [], int); 


int main() 
{ 

    const int size = 8; 
    char custmor[size]; 

    cout << "Enter a customer number in the form "; 
    cout << "LLLNNNN\n"; 
    cout << "(LLL = letters and NNNN = numbers): "; 
    cin.getline(custmor, size); 
    if(custNum(custmor, size)) 
     cout<<"That's a valid id number"<<endl; 
    else 
     cout<<"That's not a valid id number"<<endl; 




     return 0; 
} 
bool custNum(char custNum[], int size) 
{ 
    int count; 

    for(count = 0; count<3; count++) 
    { 

     if(!isalpha(custNum[count])) 
      return false; 
    } 
    for(count = 3; count <size - 1; count++) //3<7 , 4 
    { 
     if(!isdigit(custNum[count])) 
      return false; 
    } 
    return true; 

} 

поэтому я хочу пропустить массив символов из 3 букв и 4 чисел, таких как ABC1234, но я не получил условие второго цикла цикла (размер - 1). Как он работает каждый раз, когда он проверяет состояние?Перемещение по массиву символов C++

+2

Я не могу видеть размер объявления переменной в любом месте –

+2

вы должны использовать «перерыв»; intead of "return false" –

+0

Я думаю, он спрашивает, почему его второй цикл не выполняется? –

ответ

0

Вы читаете только количество символов, которые определяют переменную размера, с тех пор, почему функция custNum не вернет true для чего-либо дольше, чем переменная размера? , Потому что он не проверяет ничего больше, чем указано в переменной размера.

Ниже приведен код, который нужно

 #include <iostream> 
#include <string> 

using namespace std; 
bool custNum(string,unsigned int); 


int main() 
{ 

    const unsigned int size = 8; 
    //char custmor[size]; 

    string mystring; 

    cout << "Enter a customer number in the form "; 
    cout << "LLLNNNN\n"; 
    cout << "(LLL = letters and NNNN = numbers): "; 
    cin >> mystring; 

    cout << mystring <<endl << " " << mystring.length() << endl; 
    // cin.getline(custmor, size); 


    if(custNum(mystring , size)) 
     cout<<"That's a valid id number"<<endl; 
    else 
     cout<<"That's not a valid id number"<<endl; 




     return 0; 
} 
bool custNum(string s, unsigned int size) 
{ 
    unsigned int count; 

    if (s.length() != (size + 1)) 
     return false; 

    for(count = 0; count<3; count++) 
    { 

     if(!isalpha(s[count])) 
      return false; 
    } 
    for(count = 3; count <size - 1; count++) //3<7 , 4 
    { 
     cout << s[count] <<endl; 
     if(!isdigit(s[count])) 
      return false; 
    } 
    return true; 

} 
+0

Мой код работает отлично. Пожалуйста, объясните мне концепцию «размер - 1». Это то, о чем я прошу. Прошу прощения, если я не был достаточно ясен, так как английский - мой второй язык. –

+0

Мой размер массива - 8, но когда я ввожу этот ABC123456789, он все равно возвращает true? можете ли вы объяснить, почему? –

+0

При инициализации массива с [8], он на самом деле может содержать 9 элементов, Как есть элемент при 0 –

2
  1. Никогда не используйте count как переменную цикла. Хорошим именем для переменной цикла является i.

  2. Никогда не объявляйте переменные от их инициализации. Вышеуказанное должно быть for(int i = 0; ... в обоих случаях.

  3. i < size - 1, вероятно, неверно. Что вы, вероятно, хотите, это i < size.

Во всяком случае, это было бы полезно, если вы показали, как size объявляется, как она инициализируется, и т.д. Было бы полезно, если бы вы показали точный текст, который вы пытаетесь разобрать. Это также поможет, если вы точно объясните, что вы ожидали, и что именно произошло. Я могу изменить свой ответ, когда вы это сделаете.

+0

код работает. но зачем использовать размер - 1? –

+0

Размер-1 имеет смысл, так как они не хотят проверять цифру на финале \ 0 – Drakes

+0

@Drakes Looping, в то время как 'i <размер - 1' будет иметь смысл, если« размер »был тем, что фактически означал OP. Но, судя по мастерству наименования OP, мы могли бы так же легко ожидать, что «размер» означает не «размер», а «длину». (Как и в, результат вызова 'strlen()'.) В этом случае цикл должен был бы находиться в 'i

Смежные вопросы