在其他人的帮助下,我从头开始重做代码,因为他们指出了许多错误和无效的事情。因此我大量改变了代码。
我的程序工作不是两种格式设置,我无法弄清楚如何开始工作。
我只需要在输出顶部打印一次“DAILY SCOOP REPORT”,但是我已经移动了它,但是由于数组的设置方式,我不知道放在哪里。
这是我的代码:
#include <iostream>
使用namespace std;
int main() { string flavor_input,Capitalize; string flavors [] = {“Chocolate”,“Vanilla”,“Strawberry”,“Mint”,“Rocky Road”,“Mocha”}; int scoop_count [6] = {0,0,0,0,0,0},scoops = 0,j,k;
bool valid_option;
cout << "Welcome to Frozen Tongue Ice Cream Shop\n"<<endl;
cout << "Flavors avaliable: "<<endl;
cout << "Chocolate "<<endl;
cout << "Valnilla "<<endl;
cout << "Strawberry "<<endl;
cout << "Mint "<<endl;
cout << "Rocky Road "<<endl;
cout << "Mocha \n"<<endl;
while(true) {
cout << "Please enter the flavor of icecream sold or 'STOP' to exit.\n"<<endl;
getline (cin, flavor_input); // getline causes rocky road to be accepted with a space between the words.
string::iterator it( flavor_input.begin()); //converting the first letter of input to uppercase if not already.
if (it != flavor_input.end())
flavor_input[0] = toupper((unsigned char)flavor_input[0]);
while(++it != flavor_input.end())
{
*it = tolower((unsigned char)*it);
}
if (flavor_input == "STOP" || flavor_input == "Stop")
break;
valid_option = false;
for(int i=0;i<6;i++) //Checks to see if input matches those of possible inputs.
if(!flavor_input.compare(flavors[i]))
{
valid_option = true;
break;
}
if(!valid_option)
{
cout << "Invalid Flavor. Try again.\n\n";
flavor_input.clear();
continue;
}
for(int i=0;i<6;i++)
{
if(!flavor_input.compare(flavors[i]))
{
cout << "Enter how many scoops were sold: ";
cin >> scoops;
cin.ignore();
scoop_count[i] += scoops;
scoops = 0;
cout << '\n';
break;
}
}
}
for(int i=0;i<6;i++)
{
if(!scoop_count[i])
continue;
else
{
cout << "\nDAILY SCOOP REPORT: "<<endl;
cout << setiosflags( ios::left )
<< setw( 11 ) << flavors[i]
<< resetiosflags( ios::left )
<< setw( 4 ) << scoop_count[i] << endl;
}
}
cin.get();
return 0;
}
再次感谢所有的帮助。非常感谢。
感谢所有的帮助并指导我学习的方向,我完成的课程不是最后一部分。
我发现当我移动“每日SCOOP报告”时,为什么它不起作用。我已经重命名了文件,当我编译它时,它输出了“最后工作配置”有点交易,如果这是有道理的。所以我创建了一个新项目(.cpp文件必须有一个提交的特定名称)并将代码放入其中。现在该行仅打印一次。
在下面的代码块中,我有它可以降低除了第一个以外的所有其他字母的外壳,它似乎正在做什么。我按照我的方式编写案例的原因是说明书要求使用每个单词cap的首字母打印出flavor报告,然后降低。我将研究如何限制Rocky Road中的第二个“R”,但除了忽略的空白区域之外我还不知道如何。我需要解析这条线吗?
任何指出我正确方向的人都将不胜感激。
我试过但它在第一个if语句中出现错误“语法错误:标识符'flavor_input'”。
//converting the first letter of input to uppercase if not already.
string :: iterator it(flavor_input.begin());
if flavor_input = "rocky road"
(it != flavor_input.end())
flavor_input[6] = toupper((unsigned char)flavor_input[6]);
if (it != flavor_input.end())
flavor_input[0] = toupper((unsigned char)flavor_input[0]);
while(++it != flavor_input.end())
{
*it = tolower((unsigned char)*it);
}
答案 0 :(得分:5)
switch
不适用于字符串。
您需要使用运算符==
来选择正确的选择:
string count = // ... something
if (count == "choc") {
}
else if (count == "van") {
}
else if (count == "str") {
} // .. etc
其他一些事项:确保你使用一致的案例拼写string
,全部小写但不是大写。 String
与string
不同。
确保使用双引号""
而非单引号''
包围字符串。单引号适用于'a'
或'b'
等单个字符。双引号适用于多个字符字符串,如"abc"
和"hello"
将count
作为函数名和参数名都可能是一个坏主意,不会编译,因为同名意味着两个不同的东西。
您无法从函数返回多个值。写return a,b,c;
之类的东西并不意味着你可能想要的意思。逗号(,
)运算符允许在同一语句中计算多个表达式,结果是最后一个表达式的值,因此编写return 1,2,3;
与编写return 3;
完全相同
答案 1 :(得分:1)
C ++无法打开字符串。将switch(count) {...}
替换为if/else if
语句。另外,字符串的正确格式是“string”,而不是“string”(单引号指定单个字符,如:'a')。另外,请确保始终为字符串对象使用正确的大小写(string
而不是String
,就像返回值一样)
除此之外,看看你得到的编译器错误会很有帮助。
答案 2 :(得分:1)
我没有看过整件事,但这不会做你想做的事情:
if (flavor = 'STOP' || 'stop')
我认为你需要:
if (flavor.compare("STOP") == 0 || flavor.compare("stop") == 0)
答案 3 :(得分:1)
我在你的来源中注意到的另一件事:你将不得不在以下行的末尾省略分号(-cola?):
cout << "Please enter the flavor of icecream sold or 'STOP' to exit.\n"<<endl
<< "Flavors avaliable:\n"<<endl
<< "chocolate\n"<<endl
<< "valnilla\n"<<endl
<< "strawberry\n"<<endl
<< "mint\n"<<endl
<< "rocky road\n"<<endl
<< "mocha\n"<<endl
<< "Enter flavor : ";
这只是一个巨大的表达。这同样适用于
cout << "\nDAILY SCOOP REPORT: \n"<<endl
<< "chocolate :"<<chocolate<<"\n"<<endl
<< "vanilla :"<<vanilla<<"\n"<<endl
<< "strawberry :"<<strawberry<<"\n"<<endl
<< "mint :"<<mint<<"\n"<<endl
<< "rocky road :"<<rocky_road<<"\n"<<endl
<< "mocha :"<<mocha<<"\n"<<endl;
另外:endl
和"\n"
是多余的。您将看到由空行分隔的选项。
答案 4 :(得分:0)
让我们看看我看到的问题。
String count (string& flavor, string& count, string& chocolate, string& vanilla, string& strawberry, string& mint, string& rocky_road, string& mocha);
您在这里使用String
,我确定您的意思是std::string
或string
。
在count函数内部(SO在粘贴时截断代码),你在endl之后用分号结束行,但仍试图继续流输出。我想你的意思是
下一步:
if (flavor = 'STOP' || 'stop')
我认为您打算使用operator==
而不是operator=
,这是分配而不是比较。此外,c ++中没有联结,因此您必须将其写为:
if (flavor == 'STOP' || flavor == 'stop')
下一步:
switch (count) { case 'choc' :
这里有两个问题。首先,您只能在switch语句中使用普通旧数据(pod)。在交换机中使用std :: string不会自动调用operator ==;你将不得不使用if / else语句。此外,字符串文字是双引号,而字符文字是单引号。
下一步:
chocCount + count;
这不是一个真正的陈述。我确定你的意思是chocCount += count;
下一步:
if (flavor = chocolate) chocCount + count;
同样,您要使用==
和chocCount += count;
。
大多数问题都会重复出现。您应该在存在的任何地方解决这些问题。可能还有其他问题,但我基本上是在编写这个问题。
我没有阅读所有内容来查找语义问题,但是你的计数功能显然没有返回计数(至少我目前看到的发布)。你正在返回一个String,我认为你的意思是字符串。
这就是所有这些人类编译器将解决1个家庭作业。我建议你去看一下good C++ tutorial。