2016-07-22 8 views
-3
#include "stdafx.h" 
#include <iostream> 
#include <string> 

int isVowel(char &a, int &counter); 
bool enterAnotherOne(); 
void outputResult(int &counter); 
bool goAgain(); 


using namespace std; 

int main() { 
    int counter = 0; 
     char a; 

     do 
     { 
      do 
      { 
       void enter(a); 
       int isVowel(counter); 
       void outputResult(); 

      } while (enterAnotherOne()); 

     } while (goAgain()); 



    return 0; 
}// Function main() 
// =================== 


void enter() { 
    char a; 
    cout << "Enter a letter. "; 
    cin >> a; 

} 


}// Function Letter() 
// =========================== 


int isVowel(char &a, int &counter) { 
    counter = 0; 

    if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u' || a == 'y') 
    { 
     counter++; 
    } 

    return counter; 
}// isVowel() 
// ============== 

bool enterAnotherOne() { 
    char a; 

    cout << "Would you like to enter another letter? "; 
    cin >> a; 

    if (a == 'y') 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 




void outputResult(int &counter) { 
    cout << "The number of vowels that you entered are " << counter << endl; 

}// outputResult() 
// =================== 

bool goAgain() { 
    char a; 

    cout << "Would you like to go again? "; 
    cin >> a; 

    if (a == 'y') 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

私は、ランダムな文字を入力するときに入力される母音の数を数えるプログラムを作っていました。それは不完全な型が許可されていないと私はそれと間違っているかを把握することができないと言う母音を数えなくても不完全なタイプ

void enter(a); 

:私が午前問題は、このライン、ということです。

+0

関数の呼び出しは、 'isVowel(a、counter)'や 'enter(a)'のようになります(ただし最後の宣言は...と一致しません)。 – Jarod42

+0

[mcve]を投稿してください。 –

+0

小さなプログラムには 'stdafx.h'(プリコンパイル済みヘッダ)を使わないことをお勧めします。ビルド時間の変更は重要ではありませんが、ヘッダーをプリコンパイルする手間が増えます。プリコンパイルされたヘッダーが変更されるたびに、ヘッダーを再度コンパイルする必要があります。 –

答えて

0

これにはいくつか問題があります。

まず、enter関数のプロトタイプを作成していないように見えます(コードの最上部にある残りの関数では宣言しません)。

第2に、doループ内のコードを使用して関数を呼び出そうとしていると思いますが、関数を参照する前に型を入れているためにはっきりしません。電話をかけようとしている場合は、あらかじめどんなタイプのものも言わないでください。void enter(a);はちょうどenter(a);になるはずです(本当に、 "a"のため、次のポイントではそれ以上のものです)。

第3に、私が上で仮定したように、あなたがそのコードのビットで関数を呼び出そうとしていたと仮定すると、あなたが渡している引数は関数の定義方法と一致しません。例えば、enterは作成した関数で引数を必要としませんが、doループで呼び出そうとすると、準備されていない変数 "a"を渡そうとしています。そのブロック内の他の関数呼び出しをチェックすると、それらの関数呼び出しと矛盾することがわかります。第四に

、そして最後のポイントのオフ、建物、私は関数内で、しかし、それが渡されることはありませんしながら、あなたはそれを参照するように、あなたがenterに渡される「」変数を残してのミスを犯したと信じています。

これによって落胆しないでください!学習と繁栄を続けてください!

1
void enter(a); 

可能性が高いタイプvoidの変数のいずれかとして

  1. としてコンパイラによってenterの宣言を見てvoidコンストラクタにaを渡し、そしてvoid年代ではない完全な型されていますので、無効にすることはできません。 voidは何もありません。
  2. voidを返す関数の宣言がaの値で渡されることを予期する関数enterが宣言されています。 aは不完全な型になります。

私は最初の解釈がより可能性が高いと思います。

とにかく、あなたはおそらく

enter(a); 

を呼び出すために望んでいた。しかしenter機能は、任意のパラメータを取らないので、それは動作しません。すぐにenterを見てみましょう。

void enter() { 
    char a; 
    cout << "Enter a letter. "; 
    cin >> a; 
} 

この機能はあまり効果がありません。ユーザーから文字を読み込み、直ちにそれを投げ捨てます。その文字を使用したいと思うかもしれません。

char enter() { 
    char a; 
    cout << "Enter a letter. "; 
    cin >> a; 
    return a; 
} 

これで、呼び出し元に返された文字のコピーが取得されました。それは

enter(a); 

がより

a = enter(); 

のようになります意味あなたが右enterへの呼び出し以下

int isVowel(counter); 
void outputResult(); 

で同様の問題を抱えています。 mainが宣言された後、それが宣言されているため

残念ながらentermainには表示されません。ファイル内の関数宣言をmainに移動することをお勧めします。 enterを他の機能と同じように宣言することができますが、なぜ気になるのでしょうか?前方宣言は、関数が変更された場合にコードを変更する場所が2つある可能性があることを意味します。

私はプログラミングの教科書を抜き出し、最初のいくつかの章を読んで、機能をよりよく理解することをお勧めします。あなた自身で学習していて、教科書がない場合、またはあなたの教科書が悪い場合は、The Definitive C++ Book Guide and Listが役に立つかもしれません。

サイドノート:ここを走っている人だけではありません。

0

あなたのコードにはかなりの問題がありますが、コードに意味のあるコメントを入れてお手伝いします。それは厳しいと思うが、私は急いでいる必要がありますので、私はしようとしていない。私が思うように、これは完全にコンパイルされ実行されます。

#include "stdafx.h" 
#include <iostream> 
#include <string> 

void enter(char&); /*You forget to put the function prototype here.*/ 
void isVowel(char &, int &); /*Since you are passing by reference, and NOT using the return value, you don't need have have it return int.*/ 
bool enterAnotherOne(); 
void outputResult(int &); 
bool goAgain(); 


using namespace std; 

int main() { 
    int counter = 0; 
    char a; 

    do 
    { 
     do 
     { 
      enter(a); //you don't need to declare the function type when calling a function :(
      isVowel(a, counter); /*You didn't properly pass the argument here*/ 
      outputResult(counter); //This needs an argument. 

     } while (enterAnotherOne()); 

     //Did you want to reset the counter? if so, do it here. 
     counter = 0; 
    } while (goAgain()); 

    return 0; 
}// END OF Function main() /*Make sure you clarify it is the END OF function main().*/ 
// =================== 


void enter(char &letter) { /*This requires an argument to be useful.*/ 
    cout << "Enter a letter. "; 
    cin >> letter; 
} 
// END OF Function Letter() also, you had an extra bracket, which means this wouldn't compile. 
// =========================== 

void isVowel(char &a, int &num) { 
    //counter = 0; //if your're coing to pass counter as a argument, why doe this? 
    //counter = 0 resets counter back to 0. 

    if (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u' || a == 'y') 
    { 
     num++; 
    } 
}// END OF isVowel() 
// ============== 

bool enterAnotherOne() { 
    char choice; //give meaningful variable names! 

    cout << "Would you like to enter another letter? "; 
    cin >> choice; 

    if (choice == 'y') 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}//If you're going ot comment END OF on every function, might as well do it here. 

void outputResult(int &num) { 
    cout << "The number of vowels that you entered are " << num << endl; 
}// END OF outputResult() 
// =================== 

bool goAgain() { 
    char choice; 

    cout << "Would you like to go again? "; 
    cin >> choice; 

    if (choice == 'y') 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
}//where's END OF for this function? 
関連する問題