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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2014, 10:24   #21
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А теперь введите имя, букв на 40...
Надо проверять длину строки и если она привысила 40, то выдавать сообщение пользователю.
8Observer8 вне форума Ответить с цитированием
Старый 26.09.2014, 16:13   #22
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию

Нашла в нэте еще один способ справиться с этой проблемой.
Получается, что в потоке остается символ новой строки, после того как пользователь ввел возраст (число) и нажал Enter.
Можно добавить после этого ввода cin.get(); Он считает этот символ и программа будет продолжать работу без сбоев.
Код:
for (int i = 0; i < amountOfPerson; i++)
	{
		cout << "Имя: ";
		cin.getline(P[i].name, 32);
		cout << "Возраст: ";
		cin >> P[i].age;
                cin.get();
	}
marenko.lilia вне форума Ответить с цитированием
Старый 26.09.2014, 16:25   #23
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А мож всё-таки ну их нафиг, эти cin и cout?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.09.2014, 19:48   #24
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Правильно waleri написал. Надо использовать С++-строки std::string вместо устаревших С-строк.

На всякий случаю, напишу, что в C++ структуры и классы ничем не отличаются, кроме того, что в структуре поумолчанию члены public, а в классе private. То есть следующие записи эквивалентны:
Код:
struct Person
{
    char name[32];
    int age;
};
Код:
class Person
{
public:
    char name[32];
    int age;
};
8Observer8 вне форума Ответить с цитированием
Старый 27.09.2014, 09:51   #25
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Гораздо более правильно решить эту задачу так (там есть кнопка Run): http://cpp.sh/2cv

P.S. Если пользователь введёт вместо возраста буквы, то программа сообщит о некорректных данных и завершится

Код:
#include <iostream>
#include <string>
#include <stdexcept>
#include <vector>

class Person
{
public:
    std::string name;
    int age;
};

void showData( const std::vector<Person> &persons );

int main()
{
    std::vector<Person> persons;
    Person person;

    // Get names and grades
    std::cout << "Enter a person (q=quit): ";
    while ( true ) {
        // Get name
        std::cout << std::endl << "Name: ";
        std::string str;
        if ( !std::getline( std::cin, str ) || str == "q" ) {
            break;
        }
        person.name = str;

        // Get age
        std::cout << "Age: ";
        if ( !std::getline( std::cin, str ) || str == "q" ) {
            break;
        }

        // Exit from the program if user wrote a non-number character
        try {
            int age = std::stoi( str );
            person.age = age;
        } catch ( const std::logic_error &e ) {
            std::cerr << "Error: you wrote an incorrect age." << std::endl;
            return 1;
        }
        persons.push_back( person );
    }

    // Show names and grades
    showData( persons );

    return 0;
}

// Show names and grades
void showData( const std::vector<Person> &persons )
{
    if ( persons.size() != 0 ) {
        std::cout << std::endl << "You wrote:" << std::endl;
    }
    for ( std::size_t i = 0; i < persons.size(); i++ ) {
        std::cout << "Name: " << persons[i].name << std::endl;
        std::cout << "Age: " << persons[i].age << std::endl;
        std::cout << std::endl;
    }
}

Последний раз редактировалось 8Observer8; 27.09.2014 в 10:00.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести массив с клавиатуры. В полученном массиве найти минимальный элемент. Вывести его на экран ok57 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 17.05.2013 05:07
Ввести последовательность символов [ Senya Black ] Помощь студентам 1 08.05.2012 19:11
Ввести строку длиной до 30 символов istavzev Помощь студентам 0 03.05.2012 12:31
невозможно ввести в поле более 30 символов brutalis БД в Delphi 2 20.10.2011 11:25
Ввести имя файла с клавиатуры,открыть если существует,перименовать и переместить его mulatoschka1990 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.10.2009 16:18