食谱到营养转换器

Recipe to nutrition converter

本文关键字:转换器      更新时间:2023-10-16

我已经准备好了整个事情,但我归结为一个问题,我的教授希望我们要求用户输入多少份,我的问题在这里:

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 语句上进行比较?

不确定我做错了什么..

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

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

您也不需要istringstream


另外,与其getline(cin, servingNumber),不如cin >> servingNumber

您将servingNumber定义为代码中的字符串。不要将string与数字进行比较,也不会为字符串类定义运算符。

您收到此错误是因为您尝试将字符串与 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++。由于您已经在使用字符串流,我们可以使用它来转换我们的数字,如下所示:

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的东西,因为我们目前不知道他们在做什么。