RE:为什么我从这个计数器中得到错误的元音值?...原始代码

问题描述 投票:-2回答:4

说明:使用值返回功能编写一个程序,提示用户输入一系列字符并输出元音数。这是教练给出的问题..

#include <iostream>
using namespace std;
bool isVowel(char ch);
int main() {
    char ch;
    cout << "Enter a character: ";
    cin >> ch;

    cout << ch << " is a vowel: " << isVowel(ch) << endl; 
    return 0;
}
bool isVowel(char ch){
    if (ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
        ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u'){
        return true;
    } else
        return false;
}
c++
4个回答
2
投票

char是单个字符,而不是句子。对于一个句子使用string

string s;
cout << "Enter a sentence: ";
cin >> s;

然后使用循环遍历句子的每个字符

for (char ch : s)
{
    ...
}

然后使用isVowel测试单个字符,如果找到则增加计数。线索的名称是isVowel,而不是countVowels,所以isVowel应该测试单个元音并返回true或false,不计算元音的数量。

int vowels = 0;
for (char ch : s)
{
     if (isVowel(ch))
         vowels++;
}

最后写isVowel来测试单个角色。

bool isVowel(char ch)
{ 
    return ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
        ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u';
}

1
投票

这里有几个问题。

首先,您不初始化元音。你可能意味着int vowels = 0;int vowels {0};

其次,你正在用cin >> ch;读一个角色。我怀疑你的意思是循环输入字符串。

第三,你对isVowel的签名是bool isVowel(int vowels, char ch);,它返回一个bool。但是你已经编写了你的​​函数,因为它正在操纵整数元音。这种不一致没有意义。

第四,将isVowel的结果赋值给ch = isVowel(vowels,ch);中的一个字符。然后你再次使用isVowel中更新的ch调用cout << isVowel(vowels, ch) << ...。我不确定你在这里尝试做什么,但这也没有任何意义。

您需要重新访问所有这些代码。你可能希望isVowel实际返回一个布尔值。您可能希望迭代整个输入字符串,并适当调整vowels的值(初始化之后)。


0
投票

您的程序正在运行未定义的行为;你没有初始化使用vowels

例如,您可以创建将元音计数器作为对整数的引用的函数。

void isVowel(int& counter, char ch) {
    std::string vowels{ "AaEeIiOoUu" };
    for (auto c : vowels)
        if(ch == c)
            counter++;
}

int main(){

    char ch;
    int counter{};
    while (std::cin >> ch)
        isVowel(counter, ch);

    std::cout << counter << endl << " vowels in this sentence." << endl;
}

0
投票
#include <iostream>
using namespace std;
bool isVowel(int vowels, char ch);

所以isVowel返回bool。如果它的目的是告诉我们单个字符是否是元音,那将是有意义的。出于某种原因,我们将一个名为vowels的整数传递给它。这似乎没有任何意义。它对整数值有什么作用?

int main() {
    char ch;

所以ch是一个单一角色。好的。

    int vowels;

vowels是一个没有特定值的整数。

    cout << "Enter a sentence: ";
    cin >> ch;

哦,哦。我们要求用户输入一个句子,然后我们读入一个字符。记住,ch是一个char

    ch = isVowel(vowels,ch);

哦,哦。我们没有给vowels任何特定的值,所以我们没有给isVowel特别的价值。此外,我们获取返回的布尔值并将其分配给char类型的变量。我们为什么要这样做?

    cout << isVowel(vowels, ch) << " vowels in this sentence." << endl;

然后由于某种原因我们再次打电话给isVowel。这没有多大意义。此外,isVowel返回了bool(是或否)。为什么我们输出那个就像元音的数量一样?

    return 0;
}
// build a string counter and make it callable
bool isVowel(int vowels, char ch){ 

好的,所以isVowel返回一个布尔值,并将整数和一个字符作为输入。

for (int i = 0; i < ch; i++){
     if (ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U' ||
        ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u'){
        vowels++;
  }

我们从零循环到单个字符的值?这没有意义。

 }
    return vowels;
}

这里有很多问题。因为这段代码存在很多基本问题,所以你似乎已经尝试了一个超出C ++知识的问题,你应该首先尝试更简单的方法,例如接受句子作为输入并将其重复给用户而不使用任何其他功能。

© www.soinside.com 2019 - 2024. All rights reserved.