如果列表为空,则放弃检查
Discarding checking if list is empty
上次您设法修复了我的代码,我想再次寻求您的帮助。
由于我已经有了一个由五个元素组成的预定义列表,所以这段代码看起来相当荒谬,因为没有检查列表是否为空的目的。我似乎不知道该绕过谁,只保留"插入"函数,而不是同时检查列表是否为空。。。
#include <iostream>
#include <cmath>
using namespace std;
struct node
{
string nameOfFood;
int eatCalories;
int number;
node *next;
};
bool isEmpty(node *head);
char menu();
void insertAsFirstElement(node *&head, node *&last, string name, int eatCalories);
void insert(node *&head, node *&last, string name, int eatCalories);
void showList(node *current);
bool isEmpty(node *head)
{
if(head == NULL)
return true;
else
return false;
}
char menu()
{
char choice;
cout << "Menun";
cout << "1. Add food, beverage etc.n";
cout << "2. Show the list of food(s), beverage(s) etc.n";
cout << "3. Update your current weightn";
cout << "4. What have you been eaten?n";
cout << "5. What exercise have you done?n";
cout << "6. Exit program n";
cin >> choice;
return choice;
}
void insertAsFirstElement(node *&head, node *&last, string nameOfFood, int eatCalories)
{
node *temp = new node;
temp->nameOfFood = nameOfFood;
temp->eatCalories = eatCalories;
temp->next = NULL;
head = temp;
last = temp;
}
void insert(node *&head, node *&last, string nameOfFood, int eatCalories)
{
if(isEmpty(head))
insertAsFirstElement(head, last, nameOfFood, eatCalories);
else
{
node *temp = new node;
temp->nameOfFood = nameOfFood;
temp->eatCalories = eatCalories;
temp->next = NULL;
last->next = temp;
last = temp;
}
}
如果你需要更多的代码,请告诉我?
希望得到你的帮助!
该检查是必要的,因为如果列表为空,则必须执行一定数量的操作,而这些操作仅在这种情况下执行。
实现自己的链接列表实际上没有任何意义。标准已经定义了比您的类灵活得多的类,请参见std::forward_list
(单链列表)和std::list
(双链表)。
建议您在选择容器时默认为std::vector
或std::array
。在这种情况下,如果您只是有一个5个元素的列表,只需使用std::array
和一个自定义类型:
struct food
{
string nameOfFood;
int eatCalories;
int number;
};
然后:
std::array<food, 5> food_list { ... };
但我的列表永远不会是空的,因为我有五个预定义的元素。我会发布其余的代码,也许你会理解我的意思?否则,就是我弄错了。
#include <iostream>
#include <cmath>
using namespace std;
struct node
{
string nameOfFood;
int eatCalories;
int number;
node *next;
};
bool isEmpty(node *head);
char menu();
void insertAsFirstElement(node *&head, node *&last, string name, int eatCalories);
void insert(node *&head, node *&last, string name, int eatCalories);
void showList(node *current);
bool isEmpty(node *head)
{
if(head == NULL)
return true;
else
return false;
}
char menu()
{
char choice;
cout << "Menun";
cout << "1. Add food, beverage etc.n";
cout << "2. Show the list of food(s), beverage(s) etc.n";
cout << "3. Update your current weightn";
cout << "4. What have you been eaten?n";
cout << "5. What exercise have you done?n";
cout << "6. Exit program n";
cin >> choice;
return choice;
}
void insertAsFirstElement(node *&head, node *&last, string nameOfFood, int eatCalories)
{
node *temp = new node;
temp->nameOfFood = nameOfFood;
temp->eatCalories = eatCalories;
temp->next = NULL;
head = temp;
last = temp;
}
void insert(node *&head, node *&last, string nameOfFood, int eatCalories)
{
if(isEmpty(head))
insertAsFirstElement(head, last, nameOfFood, eatCalories);
else
{
node *temp = new node;
temp->nameOfFood = nameOfFood;
temp->eatCalories = eatCalories;
temp->next = NULL;
last->next = temp;
last = temp;
}
}
void showList(node *current)
{
if(isEmpty(current))
cout << "The list of foods is emptyn";
else
{
cout << "The list of foods contain: n";
int number = 0;
while(current != NULL)
{
++number;
cout << number << " " << current->nameOfFood << " " << current->eatCalories << " calories" << endl;
current = current->next;
}
}
}
node* subtractCalories(node *head)
{
int choice;
showList(head);
cout << "Pick the food, beverage etc. from the list by numbern";
cin >> choice;
int number = 1;
node *current = head;
while (current != NULL && choice != number)
{
++number;
current = current->next;
}
cout << "You have choosen: " << current->nameOfFood << endl;
return current;
}
int main(int argc, const char * argv[]) {
double caloriesToBurn;
double weight;
double height;
double BMI;
int answerWhile = 1;
int answerToExercise = 0;
float minutesExerciseInHour;
float caloriesBurned;
node *head = NULL;
node *last = NULL;
node *current;
char choice;
int eatCalories;
string nameOfFood;
insert(head, last, "Tuna (in oil)", 190);
insert(head, last, "Milkchocolate (Marabou)", 540);
insert(head, last, "Milk (skimmed)", 33 );
insert(head, last, "Ice Tea (white peach)", 1);
insert(head, last, "Peanuts (roasted and salted)", 624);
cout << "*** Welcome to the calorie calculator! ***n";
cout << "To get started, i need some numbers from youn";
cout << "Please enter the number of calories you need to burn today:n";
cin >> caloriesToBurn;
cout << "What are your current weight? (please enter in kilograms)n";
cin >> weight;
cout << "And lastly i need to know your height (please enter in centimeters)n";
cin >> height;
BMI = (weight / pow(height/100,2));
cout << "Your BMI is: " << BMI << endl;
if (BMI <= 18.5)
cout << "You are in the range: under weight" << endl;
else if ((BMI > 18.5) && (BMI < 25))
cout << "You are in the range: normal weight" << endl;
else
cout << "You are in the range: over weight" << endl;
do{
choice = menu();
switch(choice)
{
case '1':
cout << "Enter the name of the food, beverage etc.:";
cin >> nameOfFood;
cout << "How many calories did it contain? (measured per 100 grams):";
cin >> eatCalories;
insert(head, last, nameOfFood, eatCalories);
break;
case '2': showList(head);
break;
case '3': cout << "What you wanna update your weight to?n";
cin >> weight;
cout << "Your weight have been update to: n";
cout << weight << endl;
if (BMI <= 18.5)
cout << "You are in the range: under weight" << endl;
else if ((BMI > 18.5) && (BMI < 25))
cout << "You are in the range: normal weight" << endl;
else
cout << "You are in the range: over weight" << endl;
break;
case '4':
cout << endl << "You need to consume " << caloriesToBurn << " calories today!" << endl << endl;
current = subtractCalories(head);
caloriesToBurn = caloriesToBurn-current->eatCalories;
cout << endl << "You need to eat " << caloriesToBurn << " calories more today!" << endl;
break;
case '5':
do
{
cout << "How many minuttes have you ben exercising (please enter in hours)n";
cin >> minutesExerciseInHour;
cout << "What type of exercise have you been doing?" <<endl;
cout << "1. Running" <<endl;
cout << "2. Swimming" <<endl;
cout << "3. Cycling" <<endl;
cin >> answerToExercise;
switch(answerToExercise)
{
case 1:
caloriesBurned = weight*7.5*minutesExerciseInHour;
cout << "You have burned: " << caloriesBurned << "caloriesn";
caloriesToBurn = caloriesToBurn + caloriesBurned;
cout << "You have: " << caloriesToBurn << " left todayn";
break;
case 2:
caloriesBurned = weight*7*minutesExerciseInHour;
cout << "You have burned: " << caloriesBurned << "caloriesn";
caloriesToBurn = caloriesToBurn + caloriesBurned;
cout << "You have: " << caloriesToBurn << " left todayn";
break;
case 3:
caloriesBurned = weight*6*minutesExerciseInHour;
cout << "You have burned: " << caloriesBurned << "caloriesn";
caloriesToBurn = caloriesToBurn + caloriesBurned;
cout << "You have: " << caloriesToBurn << " left todayn";
break;
default: cout << "I think something went wrong? Try again..";
}
}
while (answerWhile != 1);
default: cout << "System exitn";
}
}while(choice != '6');
return 0;
}
我想我可以通过检查空列表来理解,因此我将把我的代码带到另一个问题上。
我得到了InsertAsFirstElement函数,但现在,我想我忘记了这个函数的作用,因为在代码中的任何地方,都不会有"按第一个元素插入",所以有人能说出这个函数的功能吗?
很抱歉给您带来不便!
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 如果列表为空,则放弃检查
- 提高进程间互斥和检查放弃