#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 :(得分:1)
void enter(a);
很可能被编译器视为
enter
作为void
类型的变量并将a
传递到void
构造函数,而void
不是完整类型,因为你不能无效。 void
没什么。 enter
的声明,它返回void
,期望通过值传递类型a
的参数。 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();
你有类似的问题
int isVowel(counter);
void outputResult();
正好在enter
的电话下方。
不幸的是enter
main
不可见,因为它是在声明main
后声明的。我建议将函数声明移到文件中的main
以上。您可以像对其他函数一样转发声明enter
,但为什么要这么麻烦?前向声明意味着如果函数发生更改,您可能有两个位置来更改代码。
我建议您提取编程教科书并阅读前几章以更好地掌握功能。如果您是自学并且没有教科书,或者您的教科书很糟糕,The Definitive C++ Book Guide and List可能对您有用。
旁注:这里不仅有人跑来跑去。
答案 1 :(得分:0)
这有一些问题。
首先,您似乎没有对enter
函数进行原型化(您不会将其与代码顶部附近的其余函数一起声明)。
其次,我认为你试图使用do
循环中的代码来调用这些函数,但是由于你在引用函数之前放置了一个类型,所以它并不清楚。如果你试图打电话给他们,你不应该事先提及任何类型,所以void enter(a);
应该变成enter(a);
(不是真的,因为“a”,更多关于下一点)。
第三,假设您试图在该位代码中调用函数,如上所述,您传入的参数与函数的定义方式不一致。例如,enter
在您创建的函数中不需要参数,但是当您尝试在do
循环中调用它时,您尝试传入一个变量“a”,它不是我做好了准备。检查该块中的其他函数调用,您会发现它与这些函数不一致。
第四,并且建立了最后一点,我相信你错误地将“a”变量传递给enter
,因为你在函数内引用它但是它永远不会传入
不要因此而气馁!继续学习和繁荣!
答案 2 :(得分: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?