食谱到营养转换器
Recipe to nutrition converter
我已经准备好了整个事情,但我归结为一个问题,我的教授希望我们要求用户输入多少份,我的问题在这里:
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的东西,因为我们目前不知道他们在做什么。
- 转换器练习:跳过 if 语句和 if 语句
- 使用转换器提升 Python 问题 - 静态链接
- 我写的 ASCII 到二进制转换器C++向后显示二进制,如何使其正确显示?
- 十进制到二进制转换器 c++
- 用于 boost::p roperty_tree 的通用枚举转换器
- 为什么我的C++基转换器中出现分段错误?
- 将字节数组转换为对象C++ |C++中的 C# 位转换器
- 英语到摩尔斯电码转换器
- 我用c++做了一个转换器,把英里转换成公里,把公里转换成英里,把赛尔修斯转换成法赫伦海特,把法赫伦海特转换成赛尔修斯
- 使用 Json 转换器反序列化 WCF 服务中的C++字符串
- 十进制,包括负到 32 位二进制转换器
- 标准::映射转换器模板
- 英里到千克转换器练习的小语法错误
- 句子转换器在存在新行的情况下不起作用
- 在C Windows程序中获取A/D转换器示例程序
- ROS中未定义的参考误差到OpenCV图像转换器
- 表达式到C++类类型转换器/类型转换
- 这里怎么了?单位转换器
- 华氏度到摄氏转换器C
- 如何理解 c++ 中的 MNIST 二进制转换器?