配方营养转换器

时间:2013-10-21 01:01:59

标签: c++

我已经准备好了所有的事情,但是我遇到了一个问题,我的教授希望我们要求用户输入将有多少份服务,我的问题在这里:

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)

我一直在&lt;和&gt;说“没有运营商匹配这些操作数”

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

   istringstream(servingNumber) >> totalCals, totalCarbs;

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

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

3 个答案:

答案 0 :(得分:1)

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

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

您也不需要istringstream


另外,getline(cin, servingNumber)代替cin >> servingNumber

答案 1 :(得分:0)

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

答案 2 :(得分: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的东西,因为我们现在还不知道他们在做什么。