Запрашивая у пользователя информацию в цикле: как продолжать работать столько раз, сколько хочет пользователь? - PullRequest
0 голосов
/ 01 февраля 2012

Ну, я делаю программу о заработной плате, и я застрял. В программе, после того, как пользователь ввел количество сотрудников, я должен сделать цикл, позволяющий пользователю вводить информацию для каждого из сотрудников. Затем введенные данные должны быть сохранены в массиве моих сотрудников, который я создал. Я попытался решить проблему с частью while(numberOfEmployees < MAXSIZE) моей программы. Это верно?

Вот что у меня сейчас:

#include <iostream>
using namespace std;

const int MAXSIZE = 20;

struct EmployeeT
{
    char name[MAXSIZE];
    char title;
    double gross;
    double tax;
    double net;
};

EmployeeT employees[MAXSIZE];

int main()
{
    cout << "How many Employees? ";
    int numberOfEmployees;
    cin >> numberOfEmployees;

    while(numberOfEmployees > MAXSIZE)
    {
        cout << "Error: Maximum number of employees is 20\n";
        cout << "How many Employees? ";
        cin >> numberOfEmployees;
    }

    int name;
    int title;
    double gross;
    double tax;
    double net;

    for (int count=0; count<numberOfEmployees; count++)
    {
        cout << "Name: \n";
        cin >> employees[ count ].name;

        cout << "Title: \n";
        cin >> employees[ count ].title;

        cout << "Gross: \n";
        cin >> employees[ count ].gross;

        cout << "Tax: \n";
        cin >> employees[ count ].tax;

        cout << "Net: ";
        cin >> employees[ count ].net;
    }
}

Я только что обновил это. Мой последний вопрос: как заставить второй цикл работать столько раз, сколько хочет пользователь? Для скольких сотрудников пользователь вводит?

Ответы [ 4 ]

0 голосов
/ 24 февраля 2012

как мне заставить второй цикл работать столько раз, сколько пользователь хочет. Для скольких сотрудников пользователь вводит?

for (int count=0; count<numberOfEmployees; count++)
{
    cout << "Name: \n";
    cin >> employees[ count ].name;

    cout << "Title: \n";
    cin >> employees[ count ].title;

    cout << "Gross: \n";
    cin >> employees[ count ].gross;

    cout << "Tax: \n";
    cin >> employees[ count ].tax;

    cout << "Net: ";
    cin >> employees[ count ].net;
    //Ask user if he wants to add more employees, if no break the loop else iterate again
     cout<<"Do u want to continue: 1 to continue 0 to exit");
     cin>>flag;
     if(flag==0)
          break;
}

}

0 голосов
/ 01 февраля 2012

Несколько проблем:

1- Поместите i ++ где-нибудь внутри цикла while (Почему бы не использовать цикл for?)

2 - имя и заголовок, вероятно, должны быть строкой:

#include <string>
//in the main:
std:string name;

3 - условие while должно быть:

while(i<numberOfEmployees && i<MAXSIZE)

(Edit: я вижу, вы только что исправили это)

Edit: я только что заметил, что вы всегда пишите водни и те же переменные.Вместо этого пишите сотрудникам [i] .name и т. Д.

Решает ли это вашу проблему?

0 голосов
/ 01 февраля 2012

Первый цикл, когда вы проверяете, вводит ли пользователь слишком большое значение, он никогда не заканчивается!Вместо while (true), просто используйте while (numberOfEmployees > MAXSIZE) и пропустите if (но не содержимое внутри if).

Кроме того, поскольку вы уже убедились, что numberOfEmployees является действительным, выне нужно условие && i < MAXSIZE во втором цикле.

0 голосов
/ 01 февраля 2012

Вам нужно что-то подобное:

int i = 0;
while(i < numberOfEmployees && i < MAXSIZE) {
    // some action here
    i++;
}

или:

for(int i = 0; i < numberOfEmployees && i < MAXSIZE; i++) {
    //some action here
}

Также вы можете просто выбрать минимальное количество numberOfEmployees и MAXSIZE, чтобы построить условие с:

numberOfEmployees = numberOfEmployees <= MAXSIZE ? numberOfEmployees : MAXSIZE;
for(int i = 0; i < numberOfEmployees; i++) { ... }

UPD: для первого цикла вы можете изменить условие на numberOfEmployees > MAXSIZE и удалить внутреннее if предложение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...