2016-07-30 3 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文字の文字配列とABC1234のような4個の数字をループしたいが、2番目のforループ(size - 1)の条件は得られなかった。どのようにそれは条件をテストするたびに動作しますか?文字配列をループするC++

+2

を必要とするコードは、あなたが使うべき –

+2

私はどこにもサイズ変数宣言を見ることができないで「壊します。」 "return false"の代わりに –

+0

彼は2番目のループが実行されない理由について質問していると思いますか? –

答えて

0

あなたは、可変サイズを指定する文字の量、 しか読んでいないのですが、それ以来、size変数より長いものについては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

私のコードは完璧に動作します。 "size - 1"の背後にあるコンセプトを私に説明してください。それが私が求めているものです。英語が私の第二言語であるため十分にわかりませんでしたが、申し訳ありません –

+0

私の配列サイズは8ですが、このABC123456789を入力すると、それでもtrueが返されますか?なぜ説明できますか? –

+0

もし0 –

2
  1. countをループ変数として使用しないでください。ループ変数の良い名前はiです。

  2. 変数を初期化から離れて決して宣言しないでください。いずれの場合も、上記はfor(int i = 0; ...である必要があります。

  3. i < size - 1が間違っている可能性があります。おそらくあなたが望むのはi < sizeです。

とにかく、それはあなたがsizeをなど、それが初期化されるか、宣言されている方法を紹介しました場合は、あなたが解析しようとしている正確なテキストを示した場合、それはまた、役立つだろう役立つだろう。また、あなたが何が起こるかを正確に説明してくれれば、まさにその代わりに何が起こったのかを助けてくれるでしょう。私はあなたがそれをするときに私の答えを修正するかもしれません。

+0

コードが機能します。なぜ私はサイズ-1を使用するのだろうか? –

+0

サイズ-1は、最後の\\ – Drakes

+0

@Drakes Loopingの数字をテストしたくないので意味がありますが、 "size <1 - >はOPが実際に意味するものであれば意味があります。しかし、OPの命名法で判断すると、「サイズ」は実際には「サイズ」ではなく「長さ」であると容易に想像することができます。 ( 'strlen()'の呼び出しの結果と同じです。)この場合、ループは 'i