我在C ++课程的当前章节中已经有了这两个程序,我似乎无法开始工作,我也不明白为什么。
第一个项目请求
“创建一个程序,根据用户输入的邮政编码显示相应的运费。为了有效,邮政编码必须包含五位数,前三位必须是”605“或”606“ 。“605”邮政编码的运费为25美元。“606”邮政编码的运费为30美元。如果输入的邮政编码无效,则显示相应的错误信息。使用标记值“X”结束程序。 “
#include <iostream>
#include <string>
using namespace std;
string zipCode = "";
string zip = "";
int main() {
cout << "ENTER AN X TO STOP ZIP CODE DATA ENTRY." << endl << endl;
cout << "Enter Zip Code: ";
getline(cin, zipCode);
while (zipCode != "x")
{
if (zipCode.length() == 5)
{
if (zipCode.find("605", 0))
{
cout << "Shipping charge is $25" << endl;
}
else if (zipCode.find("606", 0))
{
cout << "Shipping charge is $30" << endl;
}
else
cout << "Invalid Zip Code.";
}
else
{
cout << "Zip code must contain exactly 5 digits." << endl;
}
cout << "Enter Zip Code: ";
getline(cin, zipCode);
}
cout << endl << "End of Program.";
return 0;
}
我尝试了第二个程序的类似结构,但也无法正常工作。
创建一个程序,显示用户输入其编号的项目的颜色。所有项目编号恰好包含七个字符。所有产品有四种颜色可供选择:蓝色,绿色,红色和白色。项目编号中的第四个字符表示项目编号,如下所示:a B或b表示蓝色,G或g表示绿色,R或r表示红色,W或w表示白色。如果项目编号不完全是七个字符,则显示相应的错误消息。如果第四个字符不是有效颜色字符之一,则显示相应的错误消息。使用sentinel值“X”结束程序。
#include <iostream>
#include <string>
using namespace std;
string itemCode = "";
int main() {
cout << "ENTER AN X TO STOP ITEM NUMBER DATA ENTRY." << endl << endl;
cout << "Enter Item Number: ";
getline(cin, itemCode);
while (itemCode != "x")
{
if (itemCode.length() == 7)
{
if (itemCode.find("B", 3) == "B")
{
cout << "Color is blue." << endl;
}
else if (itemCode.find("G", 3) == "G")
{
cout << "Color is green." << endl;
}
else if (itemCode.find("R", 3) == "R")
{
cout << "Color is Red." << endl;
}
else if (itemCode.find("W", 3) == "W")
{
cout << "Color is White." << endl;
}
else
cout << "Invalid color code found in item number.";
}
else
{
cout << "Item number must contain exactly 7 characters." << endl;
}
cout << "Enter Item Number: ";
getline(cin, itemCode);
}
cout << endl << "End of Program.";
return 0;
}
答案 0 :(得分:0)
通过浏览您的代码,我们会想到两个明显的问题,可能是您的问题的根源:
getline
是否成功获取了输入。string::find
的返回值是错误的。您需要检查std::npos
以查看是否匹配。如果您需要更多详细信息,请参阅here。对于您的第一个问题,您需要以下内容:
while (getline(cin, zipCode) && zipCode != "x")
// ...
删除其他getline
。
对于第二个,您的用法应该类似于:
if (zipCode.find("605", 0) != string::npos)
// ...
您当前的if (zipCode.find("605", 0))
不起作用,因为0
或false
以外的任何内容都被认为是真实的。 std::string::npos
通常定义为-1
,这意味着如果找不到zipCode
,则表达式为真 - 与您期望的行为相反。