2016-06-23 7 views
-2

Holle、私のC++ PrimerPlus 6に続いてC++プログラムをタイプしました。実行すると結果は信じられないほどです。何か問題があると教えてください。私のislowerとisupperに何が問題なのですか?

#include <iostream> 
#include <cctype> 

int main() 
{ 
     using namespace std; 

     cout << "Enter your message and type @ to an end." << endl; 
     char ch; 

     int digit; 
     int alpha; 
     int lower; 
     int supper; 
     int punct; 

     cin.get(ch); 

     while (ch != '@') 
     { 
       if (isdigit(ch)) 
         digit++; 
       else if (isalpha(ch)) 
         alpha++; 
       else if (islower(ch)) 
         lower++; 
       else if (isupper(ch)) 
         supper++; 
       else 
         punct++; 
       cin.get(ch); 
     } 
     cout << "Digits: " << digit << endl << "Alpha: " << alpha 
      << endl << "Lower: " << lower << endl << "Supper: " 
      << supper << endl << "Puncts: " << punct << endl; 

     return 0; 
} 

そして、それはそれらを示した: enter image description here

+0

'iflower(ch)'ブロックの中で 'lower'と' supper'を数える必要があります。 – songyuanyao

+1

私はあなたの変数を初期化することをお勧めします(これはあなたの問題です)。あなたが何を期待したのか、そしてそれが何をしたのかを小さな例でここにテキストで記述してください。私たちがそれに値する何かをしなければ、私たちを呪う必要はありません。 :) –

+3

コードに含まれていても攻撃的ではない言語を質問に含めないでください。 –

答えて

2

どんなに文字chが下位または上位である、それはアルファベットとしてカウントされ、それはあなたのようalpha

if (isdigit(ch)) 
      digit++; 
else if (isalpha(ch)) 
      alpha++; // All alphabet will count to here 
else if (islower(ch)) 
      lower++; // this won't run 
else if (isupper(ch)) 
      supper++; // this won't run 
else 
      punct++; 
cin.get(ch); 

にカウントされますlowersupperの両方を初期化していないため、その値はランダムであり、したがって一部の非保証の結果が表示されます

関連する問題