1

我已经准备好了所有的东西,但我有一个问题,我的教授要我们问用户放入多少份,我的问题在这里:

string recipeName, userInputStr, servingNumber;

   int userInputInt;
   double totalCals, totalCarbs;
   // initialize accumlator variables
   totalCals  = 0.;
   totalCarbs =  0;
// asking for name of recipe and number of servings
   cout << "What is the name of your recipe? ";
   getline(cin, recipeName);
   cout << "How many servings would you like? ";
   getline(cin, servingNumber);
   istringstream(servingNumber) >> totalCals, totalCarbs; 
   if (servingNumber<1 || servingNumber>10)
   {
    cout << "You have entered the wrong answer. " << endl;
    return 0;
   }

更具体地说,它在这里:

if (servingNumber<1 || servingNumber>10)

我在 < 和 > 上不断收到错误消息,说“没有运算符与这些操作数匹配”

有人告诉我我应该将字符串 servingNumber 转换为 int 然后比较它,但它不是在这里转换的吗?:

   istringstream(servingNumber) >> totalCals, totalCarbs;

然后在 if 语句上进行比较?

我不确定我在做什么错..

4

3 回答 3

1

您将这些变量声明为字符串,但是当您将它们与整数进行比较时,不存在采用这些参数的重载,并且没有可接受的转换。我认为您的意思是让它们成为整数:

string recipeNamem userInputStr;
int servingNumber;                                                             /*
^^^

你也不需要istringstream


此外,代替getline(cin, servingNumber), 做cin >> servingNumber.

于 2013-10-21T01:04:21.750 回答
0

您在代码中定义servingNumber为字符串。您不将 astring与数字进行比较,未为字符串类定义运算符。

于 2013-10-21T01:04:21.080 回答
0

您收到此错误是因为您尝试将字符串与 if 语句中的数字进行比较。除此之外,这段代码还有一些其他的东西可能值得一看。

首先是定义变量的方式。在 C 中,习惯用法是在函数顶部定义所有变量,就像您在这里所做的那样。然而,在 C++ 中,我们更喜欢在使用它们的地方定义变量。目标是减少您需要对大量代码进行的思考:

string recipeName;
cout << "What is the name of your recipe?";
getline(cin, recipeName);

string servingNumber;
double totalCals;
double totalCarbs;
getline(cin, servingNumber);
istringstream(servingNumber) >> totalCals, totalCarbs;

if( servingNumber < 1 || servingNumber > 10) 
{
    cout << "You have entered the wrong answer. " << endl;
}

下一个问题是它istringstream(servingNumber) >> totalCals, totalCarbs;没有做你认为它做的事情。我不知道你打算如何使用 totalCals 和 totalCarbs,但现在这条线只设置 totalCals,对 totalCarbs 没有任何作用。

最后,您的主要问题是您正在尝试将 servingNumber (字符串)与原始整数进行比较。我们需要将 servingNumber 转换为整数。有些人推荐atoi了哪个可以完成这项工作,但通常被认为是单一的 C++。由于您已经在使用 stringstream,我们可以使用它来转换我们的数字,如下所示:

string recipeName;
cout << "What is the name of your recipe?";
getline(cin, recipeName);

string servingNumberInput;
double totalCals;
double totalCarbs;
getline(cin, servingNumberInput);
istringstream(servingNumberInput) >> totalCals, totalCarbs;

int servingNumber;
istringstream(servingNumberInput) >> servingNumber;
if( servingNumber < 1 || servingNumber > 10) 
{
    cout << "You have entered the wrong answer. " << endl;
}

或者,如果您不依赖于 getline,您可以直接从 cin 输入数字,如下所示:

string recipeName;
cout << "What is the name of your recipe?";
getline(cin, recipeName);

int servingNumber;
cin >> servingNumber;

if( servingNumber < 1 || servingNumber > 10) 
{
    cout << "You have entered the wrong answer. " << endl;
}

我摆脱了 totalCarbs 和 totalCals 的东西,因为我们现在不知道它们在做什么。

于 2013-10-21T02:14:33.740 回答