【发布时间】:2012-02-29 11:16:26
【问题描述】:
char ch;
//Get data from user
cout << "Enter your sentence on one line followed by a # to end it: " << endl;
while (cin >> character && character != '#')
{
cin.get(ch);
ch = static_cast<char>(toupper(ch));
outFile << ch;
if (character == 'A' || character == 'E' || character == 'I' || character == 'O'
|| character == 'U')
{
vowelCount ++;
}
}
outFile << "number of vowels: " << vowelCount << endl;
我正在尝试输入一个句子,读取它有多少元音、空格和其他字符。但是 vowelCount 永远不会正确,我也无法让它将相同的句子写入输出文件。有什么提示吗?
【问题讨论】:
-
您已经在阅读
character。为什么要再次阅读ch?此外,您可能想了解元音是什么以及有多少个。 -
更糟糕的是,读入
character也只是跳过了前导空格!你只想使用cin.get(ch)之类的东西。另一个问题是toupper()的参数必须是正整数,但char在这种情况下可以签名,例如我的名字可能会使您的程序崩溃。你想使用toupper(static_cast<unsigned char>(ch))之类的东西。 -
使用
cin >> character运算符将标准输入中的一个字符读入字符变量。执行cin.get(ch)会将第二个字符读入 ch 变量。您只需要执行这些操作之一。删除cin.get(ch)行并尝试将所有对character的引用替换为ch。 -
当我写到 outFile 时,我怎么能用空格写说(字符)。
-
@mmodahl:您对
cin >> character行为的描述只有在设置了noskipws标志时才是正确的(例如,使用std::cin >> std::noskipws)。否则,字符的格式化输入会跳过前导空格。这也应该回答关于如何写空格的问题。
标签: c++ io char while-loop file-io