Member 13509203 Ответов: 4

Как перезапустить программу C++


Напишите свой вопрос здесь.
может ли кто - нибудь сказать мне, как перезапустить программу, когда я набираю R, если появилась ошибка ?



#include <conio.h>
#include <iostream>

using namespace std;

void restart() {
	
/////????
    
}



int main()
	
{


float fat, cal = -1, gram = -1 ,R ;

float per;


cout << "Enter the total number of calories" <<" in the food" << endl;
cin >> cal;
cout << "Enter the number of fat grams" <<" in the food" << endl;
cin >> gram;


fat = 9 * gram;
per = (fat / cal) * 100;


if (per > 100 || cal < 0 || fat < 0) {

 cout << " \n ( ERROR ,Either the calories or fat grams were incorrect ! ) \n \t To Repeat write [R] then Enter : ";
cin >> R;


restart(); ///// problem _i need to restart the program here <~~~~~~~





}





if (per >= 30)

{

cout << "The percentage of calories" << " from the fat is " << per << "% \n";

}

else

{


cout << "The percentage of calories from" << " the fat is" << fat << "% \n";

cout << "The fat is low in the food";

}


system("pause");


return 0;

}


Что я уже пробовал:

пустота перезапуска() {

/////????

}

если (per > 100 || cal < 0 || fat < 0) {

cout << " \n ( ошибка ,либо калории, либо граммы жира были неверны ! ) \n \t для повторения напишите [R], а затем введите : ";
cin >> R;


restart(); ///// проблема _ мне нужно перезапустить программу здесь <~~~~~~~
}

Понятия не имею ,что делать, я все еще новичок в попытке выучить c++

4 Ответов

Рейтинг:
2

GKP1992

Привет,

Вам нужно понять основы языка, прежде чем пытаться писать код, который даже компилируется правильно.

Из того, что я понимаю, вам нужно вызвать метод, который снова принимает cal и gram, если пользователь нажимает клавишу "R". Я бы предложил написать другой метод, который делает это, и вызвать его в основной функции.

Некоторые проблемы, которые я заметил, R не должен быть переменной с плавающей запятой, определяющей ее как строку или символ. Также линия

per = (fat / cal) * 100;
будет выдано исключение divide by zero, если пользователь вводит ноль.

А для вашей задачи достаточно написать рекурсивную функцию.
int main()
{
   Calculate();
}
private void Calculate()
{
    float fat, cal = -1, gram = -1;
    char R;
 
    float per;
 

    cout << "Enter the total number of calories" <<" in the food" << endl;
    cin >> cal;
    cout << "Enter the number of fat grams" <<" in the food" << endl;
    cin >> gram;
 

    fat = 9 * gram;
    if(cal!= 0)
    {
       per = (fat / cal) * 100;
    }

    if (per > 100 || cal < 0 || fat < 0) 
    {
       cout << " \n ( ERROR ,Either the calories or fat grams were incorrect ! ) \n \t To Repeat write [R] then Enter : ";
       cin >> R;
       if(R == 'R' || R == 'r')
       {
           Calculate(); //Calls the method all over again if the user inputs R.
       }

    }
 

   if (per >= 30)
   { 
      cout << "The percentage of calories" << " from the fat is " << per << "% \n";
   }
   else
   {
      cout << "The percentage of calories from" << " the fat is" << fat << "% \n";
      cout << "The fat is low in the food"; 
   }
}


Рейтинг:
2

Jochen Arndt

Нет необходимости перезапускать приложение. Просто используйте цикл while:

bool bRedo = false;
do
{
    cout << "Enter the total number of calories" <<" in the food" << endl;
    cin >> cal;
    cout << "Enter the number of fat grams" <<" in the food" << endl;
    cin >> gram;
    
    fat = 9 * gram;
    // Zero cal is an error too and would result in a division by zero
    // Therefore it must be checked before performing the division
    if (cal <= 0 || fat < 0 || fat / cal > 1) 
    {
        cout << " \n ( ERROR ,Either the calories or fat grams were incorrect ! ) \n \t To Repeat write [R] then Enter : ";
        string strRestart;
        getline(cin, strRestart);
        if (0 == strRestart.compare("R"))
            bRedo = true;
        else
            return 1;
    }
    else
        per = (fat / cal) * 100;
}
while (bRedo); 


Рейтинг:
1

Patrice T

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию.

#include <conio.h>
#include <iostream>

using namespace std;

void restart() {
  /////????
}

int main()
{
  float fat, cal = -1, gram = -1 ,R ;
  float per;

  cout << "Enter the total number of calories" <<" in the food" << endl;
  cin >> cal;
  cout << "Enter the number of fat grams" <<" in the food" << endl;
  cin >> gram;

  fat = 9 * gram;
  per = (fat / cal) * 100;

  if (per > 100 || cal < 0 || fat < 0) {
    cout << " \n ( ERROR ,Either the calories or fat grams were incorrect ! ) \n \t To Repeat write [R] then Enter : ";
    cin >> R;

    restart(); ///// problem _i need to restart the program here <~~~~~~~

  }



  if (per >= 30)
  {
    cout << "The percentage of calories" << " from the fat is " << per << "% \n";
  }
  else
  {
    cout << "The percentage of calories from" << " the fat is" << fat << "% \n";
    cout << "The fat is low in the food";
  }

  system("pause");
  return 0;

}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]

Цитата:
может ли кто - нибудь сказать мне, как перезапустить программу, когда я набираю R, если появилась ошибка ?

Как есть, нет никакой концепции вызова процедуры, которая перезапустит программу на языке Си.
Вы можете использовать метку и перейти к этой метке (она же: restart: и goto restart;), но я рекомендую не использовать его в качестве ученика, так как это плохая привычка использовать его так рано.
Вы бы лучше подумали об использовании петлевой структуры.


Рейтинг:
0

Member 13509203

Большое спасибо ,ребята!, ценю вашу помощь всем .


phil.o

Пожалуйста, не публикуйте свои поздравления в новом ответе.
Вы можете добавить комментарии к предложенным решениям, или, что еще лучше, вы можете дать им справедливую оценку и принять их формально.
Любезно :)