我的c ++程序疑难解答

时间:2014-12-03 01:20:10

标签: c++

我在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;
}

1 个答案:

答案 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))不起作用,因为0false以外的任何内容都被认为是真实的。 std::string::npos通常定义为-1,这意味着如果找不到zipCode,则表达式为真 - 与您期望的行为相反。