Как правильно выполнять операторы if и делать циклы while с функциями? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть 5 программ, которые прекрасно работают по отдельности, но когда я объединяю их, я получаю сообщения об ошибках и не собираюсь. У меня есть меню, чтобы выбрать, какую программу запустить, используя операторы if. Также цикл do while для повторения программ. Я считаю, что это как-то связано с функциями, потому что у меня раньше не было этой проблемы с простыми программами. Программа должна сначала спросить, какую программу вы хотите запустить из меню. Он запустит эту программу, а затем спросит, хотите ли вы повторить.

Я не знаю, что попробовать, кроме того, что сейчас есть в программе. Я взял цикл do while, но все еще имел проблему с операторами if.

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main()
{
int choice;
char repeat;
if (repeat == 'm' || 'M'){
cout << "1. Perfect Scores\n"
"2. Larger Than n\n"
"3. Roman Numeral Converter\n"
"4. Monkey Business\n"
"5. Lottery\n"
"6. Exit\n";


cout << "Pick which program you would like to run." << endl;
cin >> choice;
}


else if (choice == 1){  //  -----------Perfect Scores------------
    do{
int countPerfect(int a[])
{
int i=0;
for(int l=0; l<10; l++)
    if(a[1]==100)
        i++;
return i;
}

{
int score[10];
for(int i=0; i<10; i++)
{
    cout << "Enter score " << i+1 << endl;
    cin >> score[i];
    while(score[i]<0 || score[i] > 100)
    {
        cout << "Enter score between 1 and 100." << endl;
        cin >> score[i];
    }
}
int n = countPerfect(score);
cout << "No of perfect scores: " << n << endl;
cout << "To repeat, press Y. For main menu, press M" << endl;
cin >> repeat;
return 0;
}
        }while(repeat == 'Y' || repeat == 'y');
}
//        ------------Larger Than n--------------
   else if (choice == 2){
       do{
void display_greator(int A[], int size, int n)
{
int i;
for(i=0; i< size; i++)
{
    if(A[i]>n)
    {
        cout << A[i] << endl;
    }
}
}

int main(void)
{
int i, size;
cout << "Enter the size of your array:"<< endl;
cin >> size;
int N[size];
cout << "Enter a list of " << size << " numbers:" << endl;
for( i=0; i<size; i++)
{
    cin >> N[i];
}
int num;
cout << "Enter your number n:" << endl;
cin >> num;
display_greator(N, size, num);
cout << "To repeat, press Y. For main menu, press M" << endl;
cin >> repeat;
}
       }while(repeat == 'Y' || repeat == 'y');
}
//  ----------------------Roman Numeral Converter------------------
else if (choice == 3){
    char repeat;
    do{
{
int n;
string romanNumbers[]={"I", "II", "III", "IV", "V", "VI", "VII",
    "VIII", "IX", "X", "XI", "XII",
    "XIII", "VIX", "XV", "XVI", "XVII", "XVIII", "XIX", "XX"};
cout << "Enter a decimal number or enter 0 to quit."  << endl;
cin >> n;
if(n==0)
exit(0);
do
{

    cout << "Enter number between 1 and 20" << endl;
    cout << "Enter number or enter 0 to quit" << endl;
    cin >> n;
} while(n < 0 || n > 20);
{
    cout << "Enter decimal equivalent roman number:" << endl;
    cout << "Enter a number between 1 and 20:" << endl;
    cin >> n;
    if(n==0)
        exit(0);
    cout << "To repeat, press Y. For main menu, press M" << endl;
    cin >> repeat;
}
while(n > 0 || n < 20);
return 0;
}
        }while(repeat == 'Y' || repeat == 'y');
}
//    ---------------Monkey Business--------------------
else if(choice == 4){
   do{
const int DAYS = 7;
double getTotalAmountOfFood(int[][DAYS],int);
double getLeastAmountOfFood(int[][DAYS],int, double);
double getGreatestAmountOfFood(int[][DAYS],int, double);

{

    const int MONKEYS = 3;
    double totalFood, averageFood, leastFood, greatestFood;
    int foodInfo[MONKEYS][DAYS];

    for(int i= 0; i< MONKEYS; i++)
    {
        cout << "Enter the food information of the monkey" <<
        (i + 1) << ":" << endl;
        for(int j = 0; j < DAYS; j++)
        {
            cout << "Day" << (j + 1) << ":" << endl;
            cin >> foodInfo[i][j];
            while(foodInfo[i][j] < 0)
            {
                cout << "Day " << (j+1) << ":" << endl;
                cin >> foodInfo[i][j];


            }
        }
        cout << endl;
    }
    totalFood = getTotalAmountOfFood(foodInfo, MONKEYS);
    leastFood = getLeastAmountOfFood(foodInfo, MONKEYS, totalFood);
    greatestFood = getGreatestAmountOfFood(foodInfo, MONKEYS, 0);
    averageFood = totalFood / DAYS;
    cout << "The average amount of food per day for three monkeys(in pounds):"
    << averageFood << endl;
    cout << "The least amount of food per week for monkeys(in pounds) is:"
    << leastFood << endl;
    cout << "The greatest amount of food per wek for a monkey is(in pounds):"
    << greatestFood << endl;
    cout << "To repeat, press Y. For main menu, press M" << endl;
    cin >> repeat;
    return 0;
}

double getTotalAmountOfFood(int food[][DAYS],int mnks)
{
    double total = 0;

    for(int i = 0; i < mnks; i++)
    {
        for(int j = 0; j < DAYS; j++)
        {
            total += food[i][j];
        }
    }
    return total;
}
double getLeastAmountOfFood(int food[][DAYS], int mnks, double leastAmount)
{
    double least = leastAmount;
    double weekTotal;
    for(int i = 0; i < mnks; i++)
    {
        weekTotal = 0;
        for(int j = 0; j < DAYS; j++)
        {
            weekTotal += food[i][j];
        }
        if(least > weekTotal)
            least = weekTotal;
    }
    return least;
}
double getGreatestAmountOfFood(int food[][DAYS], int mnks, double greatestAmount)
{
    double greatest = greatestAmount;
    double weekTotal;
    for(int i = 0; i < mnks; i++)
    {
        weekTotal = 0;
        for(int j = 0; j < DAYS; j++)
        {
            weekTotal +=food[i][j];
        }
        if(greatest < weekTotal)
            greatest = weekTotal;
    }

    return greatest;
}
       }while(repeat == 'Y' || repeat == 'y');
}
//                    ----------------Lottery--------------------
else if (choice == 5){
    char repeat;
    do{

    srand(time(NULL));
    int winningDigits[5];
    int player[5];
    int num;
    int matchCount = 0;

    for (int i = 0; i < 5; i++)
    {
        winningDigits[i] = rand() % 10;
    }

    cout << "Enter 5 integers in the range of 0 to 9." << endl;
    for(int i = 0; i < 5; i++)
    {
        cout << "Number #" << (i + 1) << ": " << endl;
        cin >> num;

        while (num < 0 || num > 9)
        {
            cout << "Invalid number! It should be in the range of 0 through 9." << endl;
            cout << "Number #" << (i + 1) << ": " << endl;
            cin >> num;
        }
        player[i] = num;
    }
    for (int i = 0; i < 5; i++)
    {
        if (winningDigits[i] == player[i])
        {
            matchCount++;
        }
    }
    cout << "Winning digits: " << endl;
    for (int i = 0; i < 5; i++)
    {
        cout << winningDigits[i] << " " << endl;
    }
    cout << "Player's digits: " << endl;
    for (int i = 0; i < 5; i++)
    {
        cout << player[i] << " " << endl;
    }
    cout << endl << endl << "Number of digits matched: " 
<< matchCount << endl;
    cout << "To repeat, press Y. For main menu, press M" << endl;
    cin >> repeat;
    return 0;

        }while(repeat == 'Y' || repeat == 'y');
}
else if (choice == 6)
{cout << "Bye" << endl;}
}


I'm expecting to be able to choose a program to run, repeat it, and     repeat the entire program from main menu.

1 Ответ

0 голосов
/ 17 октября 2019

Я не собираюсь указывать на все ошибки в вашем коде, их просто слишком много. Вы слишком быстро зашли слишком далеко. Если вы думаете, что сложность кода и его ошибки пугают, вы правы. Я написал коды с большим количеством строк, но ваш слишком сложен для меня. Идите маленькими шагами. Начните с чего-то вроде:

int choose() { return 0; }

void func1() {}
void func2() {}

int main() {
    int choice = 0;
    while ( choice = choose() ) { 
        switch(choice) {
            case 1 : func1(); break;
            case 2 : func2(); break;
        }
    }
}

Ваша main функция не должна быть более сложной, чем эта.

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

Некоторые проблемы в вашем коде (частично украдены из комментариев):

  • вы не можете иметь более одного main
  • вы не можете определять функции внутри функций
  • вы не можете начать оператор if с else if
  • int N[size]; не является стандартным C ++ для постоянной времени компиляции size. Используйте std::vector вместо
  • см. здесь , почему using namespace std считается плохой практикой
  • if (repeat == 'm' || 'M') не выполняет то, что вы ожидаете, должно быть if (repeat == 'm' || repeat == 'M'). В вашем 'M' принимается как bool, который всегда true (потому что это не 0).
  • убедитесь, что инициализировали переменные. Использование переменных, которые не инициализированы, приводит к неопределенному поведению.
  • , пожалуйста, в следующий раз уменьшите ваш код до mcve и попытайтесь сосредоточиться на одной проблеме, также включите ошибку в вопрос
  • Я не могу помочь себе, чем указатьчто для каждой отдельной проблемы есть повторяющиеся вопросы, которые возвращают меня к следующему: не делайте слишком много вещей одновременно. Исправить 100 ошибок за один раз чрезвычайно сложно, исправить ошибку 1 можно.
  • И последнее, но не менее важное: обращайте внимание на ошибки и предупреждения компилятора при написании кода (опять же: не после того, как вы написали несколько страниц, а послекаждая строка)
...