Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2016, 14:04   #1
Aleks70694
 
Регистрация: 07.03.2016
Сообщений: 5
По умолчанию Не работает цикл do while

Объясните пожалуйста, почему цикл do while не работает.
При вводе n, этот цикл должен завершаться и должен осуществляться вывод введенных данных.
Код:
#include <iostream>
#include <string>
using namespace std;
const int STRING = 100;
class employee 
{
private:
    string name;
    long number;
public:
    void getdata() 
    {
        cout << "Введите имя и номер сотрудника через пробел" << endl;
        cin >> name >> number;
    }
    void putdata()
    {
        cout << "Сотрудник " << name << " №" << number << endl;
    }
};
 
int main()
{
setlocale(LC_ALL,"RUS");
int cycle = 0;
char ch;
employee data [STRING];
do
{
for (int s = 0; s < STRING; s++)
{
data[s].getdata();
cycle++;
cout << "Продолжить ввод?(y-да, n-нет):  ";
cin >> ch;
}
}
while (ch != 'n');
for (int s = 0; s < cycle; s++)
{
data[s].putdata();
}
system("pause");
return 0;
}
Заменил, на n теперь реагирует.
Код:
for (int s = 0; s < STRING; s++)
{
while (ch != 'n')
{
data[s].getdata();
cycle++;
cout << "Продолжить ввод?(y-да, n-нет):  ";
cin >> ch;
}
}
Но появилась другая проблема: я ввел 4 записи, но на выводе вывелось:
Четвертая запись
Непонятные символы
Непонятные символы
Непонятные символы
Куда делись первые три, не пойму. По идее сначала data[0] должно выводится, потом data[1] и так до того момента, пока не дойдет до значения cycle.

Последний раз редактировалось BDA; 07.03.2016 в 22:46.
Aleks70694 вне форума Ответить с цитированием
Старый 07.03.2016, 22:42   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Если рассматривать последний фрагмент кода, то все 4 записи производились в data[0], так как во внутреннем цикле s не меняется.
Не проверял, но попробуйте:
Код:
do { 
    data[cycle++].getdata(); 
    cout << "Продолжить ввод? (y-да, n-нет):  "; 
    cin >> ch; 
} while (cycle < STRING && ch != 'n');
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 07.03.2016 в 22:46.
BDA вне форума Ответить с цитированием
Старый 08.03.2016, 00:01   #3
Aleks70694
 
Регистрация: 07.03.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Если рассматривать последний фрагмент кода, то все 4 записи производились в data[0], так как во внутреннем цикле s не меняется.
Не проверял, но попробуйте:
Код:
do { 
    data[cycle++].getdata(); 
    cout << "Продолжить ввод? (y-да, n-нет):  "; 
    cin >> ch; 
} while (cycle < STRING && ch != 'n');
Спасибо, помогли) Всего лишь надо было поменять у себя в коде во фрагменте data[s] на data[s++] и убрать первый цикл)
Рабочий код(запрашивает имя сотрудника и его номер и заносит в массив, и осуществляет вывод из массива эти данные):
Код:
#include <iostream>
#include <string>
using namespace std;
const int STRING = 100;
class employee 
{
private:
    string name;
    long number;
public:
    void getdata() 
    {
        cout << "Введите имя и номер сотрудника через пробел" << endl;
        cin >> name >> number;
    }
    void putdata()
    {
        cout << "Сотрудник " << name << " №" << number << endl;
    }
};
 
int main()
{
setlocale(LC_ALL,"RUS");
int cycle = 0, s = 0;
char ch = 'a';
employee data [STRING];
while (ch != 'n')
{
data[s++].getdata();
cycle++;
cout << "Продолжить ввод?(y-да, n-нет):  ";
cin >> ch;
}
for (int s = 0; s < cycle; s++)
{
data[s].putdata();
}
system("pause");
return 0;
}

Последний раз редактировалось BDA; 08.03.2016 в 00:11.
Aleks70694 вне форума Ответить с цитированием
Старый 08.03.2016, 00:10   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Пожалуйста. Учтите, что сейчас у вас нет проверки на выход за пределы массива data.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает цикл VASwko Общие вопросы C/C++ 9 23.05.2013 11:45
Не работает цикл -=DeS=- Общие вопросы Delphi 6 17.03.2013 14:45
Не работает цикл Lisёноk Помощь студентам 5 23.03.2010 21:39
Цикл не работает doniyor Общие вопросы Delphi 1 06.12.2009 15:52
Цикл не работает...? Иринкаа Помощь студентам 6 17.11.2007 00:27