Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76

Нюансы ввода/вывода: как правильно организовать ввод строки с пробелами?

29.11.2016, 20:31. Показов 1594. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток.
Такой вопрос: у меня есть структура, содержащая ФИО, адрес, телефон, возраст. Хотелось, чтобы была возможность вводить Фамилию Имя и Отчество в одно поле ФИО. Но нажимая пробел, он пропускает заполнение других полей. Можно ли это реализовать?
Буду благодарен, всем ответам
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2016, 20:31
Ответы с готовыми решениями:

Как организовать исключение ввода-вывода в примере программы?
В учебнике «Шилдт Г. - Java 8. Руководство для начинающих», в главе 9 , разделе «Использование ключевого слова throws» приводится пример...

Нюансы ввода/вывода в Си и C++ (функция printf() и объект std::cout)
Добрый день. Интересует следующий вопрос: каким именно образом работает команда форматирование "%i" в printf. В манах...

Как правильно организовать ввод данных
Есть база FireBird 2.0 Пишу клинент в Delphi 7. Требуется вывести из базы некоторые данные в таблицу и в этой же таблице производить...

13
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.11.2016, 20:36
std::getline() (см. тут и тут).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
int main()
{
    std::string name;
 
    std::cout << "Please, enter your full name: ";
    std::getline( std::cin, name );
    std::cout << "Hello, " << name << "!\n";
 
    return 0;
}
Добавлено через 2 минуты
georgiisav988, и не забудь про такой нюанс.
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
29.11.2016, 20:50  [ТС]
Спасибо.
Если использовать так, то синтаксис будет: std::getline(std::cin,FIO[i].human)
FIO-наименование поля;
human-переменная типа Human;
Human-наименование структур.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.11.2016, 21:00
georgiisav988, в массиве объектов пользовательского типа (массив структур) - да.
Если заполняете в цикле и i - это счётчик.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
struct Human
{
    std::string name_;
    unsigned int age_;
};
 
int main()
{
    Human h;
 
    std::cout << "Please, enter your full name: ";
    std::getline( std::cin, h.name_ );
 
    std::cout << "Please, enter your age: ";
    std::cin >> h.age_;
 
    std::cout << "\n\nHello, " << h.name_ << "!\n";
    std::cout << h.age_ << " - it's good age. Enjoy every minute of your life!\n\n";
 
    return 0;
}
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
29.11.2016, 21:09  [ТС]
Значит
надо объявить в структуре через: std::string - это раз;
потом считать через std::getline(std::cin,human[i].FIO)-это два;
а записать в файл- это просто out<<human[i].FIO)-это три;
где out - это ofstream out("Human.txt");
так будет правильно?!

Я еще не хорошо разбираюсь, как тут и что.
Я воспользовался твоими подсказками.
И он не так ,как мне хотелось бы работает:
Вся программа, еще не знаю, как вы ее записываете, но все же:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
struct Human
{
    std::string FIO; //Фамилия Имя Отчество
    std::string address; //Домашний адрес
    std::string tel; //телефон
    int age; //возраст
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n;
    ofstream out("Human.txt");
    int key = 0;
    while (key != 27)
    {
        cout << endl
             << "MENU:" << endl
             << endl
             << "\t1 - ADD" << endl
             << "\t2 - SHOW" << endl
             << "\t3 - Search" << endl
             << "\t4 - EXIT(Esc)" << endl
             << endl
             << "Press any key..." << endl;
        key = getch();
        switch (key)
        {
 
            case 49:
 
                puts("\nДобавление нового студента");
                cout << "Введите кол-во записей -> ";
                cin >> n;
                cout << "Вводите кол-во записей";
                struct Human* human = new struct Human[n];
                for (int i = 0; i < n; i++)
                {
                    cout << "Введите ФИО > ";
                    std::getline(std::cin, human[i].FIO);
                    cout << "Введите адрес > ";
                    std::getline(std::cin, human[i].address);
                    cout << "Введите телефон > ";
                    std::getline(std::cin, human[i].tel);
                    cout << "Введите возраст";
                    cin >> human[i].age;
                    cout << endl;
                }
                for (int i = 0; i < n; i++)
                {
 
                    out << right << left << human[i].FIO << "|" << human[i].address << "|"
                        << human[i].tel << "|" << human[i].age << endl;
                    cin.get();
                }
                out.close();
                break;
        }
    }
    return 0;
}
0
29.11.2016, 21:45
 Комментарий модератора 
georgiisav988, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода), а так же пункт 4.6.
0
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
29.11.2016, 21:54  [ТС]
Прошу прощение, за не соблюдение правил. И не хотелось бы думать, что ответа нет на мои вопросы по этим причинам.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
29.11.2016, 21:55
georgiisav988, я просто пошёл спать. Завтра, всё завтра.
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
29.11.2016, 22:00  [ТС]
Нет времени ждать. Хочется закончить с этой лабораторной работе по С++.
Ну да ладно. Не вправе заставлять. И на том спасибо, а если не забудете, то буду благодарен
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
30.11.2016, 08:28
georgiisav988, вот так пока что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <fstream>
 
enum ChosenOperation { ADD = 1, SHOW, SEARCH, EXIT };
 
enum SearchingCriteria { NAME = 1, ADDRESS, PHONE, AGE };
 
struct Human
{
    std::string full_name;  // фамилия имя отчество
    std::string address;    // домашний адрес
    std::string phone;      // телефон
    unsigned int age;       // возраст
};
 
void add_new_entry_to_file( std::string filename )
{
    std::cout << "\n\n\tAdding new student to database.\n\n";
 
    std::cout << "Enter number of entries: ";
    unsigned int number_of_entries;
    std::cin >> number_of_entries;
 
    std::cout << "\n\n\tEnter all nessesary data of each entry.\n\n";
    struct Human* human = new struct Human[number_of_entries];
 
    for ( unsigned int i = 0, nth; i < number_of_entries; ++i )
    {
        nth = i + 1;
        while ( std::cin.get() != '\n' );
 
        std::cout
            << "Enter full name of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].full_name );
 
        std::cout
            << "Enter address of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].address );
 
        std::cout
            << "Enter phone number of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].phone );
 
        std::cout
            << "Enter age of "
            << nth
            << " student: ";
        std::cin >> human[i].age;
        std::cout << "\n";
    }
 
    std::ofstream fout( filename.c_str() );
    for ( unsigned int i = 0; i < number_of_entries; ++i )
    {
        fout
            << human[i].full_name
            << "|"
            << human[i].address
            << "|"
            << human[i].phone
            << "|"
            << human[i].age
            << "\n";
    }
    fout.close();
 
    delete [] human;
}
 
void show_data( std::string filename )
{
    // TODO
}
 
void search_data_in_file( std::string filename, int searching_criteria )
{
    // TODO
}
 
int main()
{
    int key = 0;
    while ( key != ChosenOperation::EXIT )
    {
        std::cout
            << "MENU:\n\n"
            << "\t1 - ADD\n"
            << "\t2 - SHOW\n"
            << "\t3 - SEARCH\n"
            << "\t4 - EXIT(Esc)\n\n"
            << "Press any key: ";
 
        std::cin >> key;
 
        switch ( key )
        {
            case ChosenOperation::ADD :
                add_new_entry_to_file( "Person.txt" );
 
            case ChosenOperation::SHOW :
                show_data( "Person.txt" );
 
            case ChosenOperation::SEARCH :
                search_data_in_file( "Person.txt", SearchingCriteria::NAME );
 
            case ChosenOperation::EXIT :
                key = ChosenOperation::EXIT;
        }
    }
 
    return 0;
}
Добавлено через 46 минут
georgiisav988, Вам осталось только дописать функции show_data() и search_data_in_file().
Но делать это лучше в отдельных темах. Помните: один вопрос - одна тема (см. правила форума, п. 4.4).

Добавлено через 3 минуты
georgiisav988, и да, по-английски человек - Person. Human - это, всё-таки, люди как вид. Типа, вот есть орки, эльфы, тролли, гномы, разумная плесень с Альфа-Центавра, на'ви, чужие (которые aliens), а есть люди (humans):
Цитата Сообщение от Гугл-переводчик
a human being, especially a person as distinguished from an animal or (in science fiction) an alien.
Так что класс (структуру) лучше было назвать Person.
0
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
30.11.2016, 15:32  [ТС]
Спасибо.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
01.12.2016, 07:51
georgiisav988, я же просил:
Цитата Сообщение от gru74ik Посмотреть сообщение
Помните: один вопрос - одна тема (см. правила форума, п. 4.4).
Ваш вопрос выделен в отдельную тему.
0
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
01.12.2016, 16:25  [ТС]
Хорошо, вот сейчас вопрос такой, что данный тобой код не сохраняет уже веденные записи, а удаляет их. Этот вопрос мне также, надо как еще одну тему сделать? Ведь это не имеет смысла.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
01.12.2016, 17:49
georgiisav988, название темы видишь? Давай ещё разок:
.
Нюансы ввода/вывода: как правильно организовать ввод строки с пробелами?
.
Если есть ещё вопросы по вводу строк с пробелами - милости прошу отписываться в этой теме. Если есть другие вопросы, создай новую тему. Таков стандартный порядок. Таковы правила форума.

Добавлено через 41 секунду
Цитата Сообщение от georgiisav988 Посмотреть сообщение
Ведь это не имеет смысла.
Тебе только так кажется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2016, 17:49
Помогаю со студенческими работами здесь

Как правильно организовать файловый ввод/вывод?
setlocale(LC_ALL,&quot;russian&quot;); double x; ifstream fin; fin.open(&quot;input.txt&quot;); fin&gt;&gt;tochnost&gt;&gt;x&gt;&gt;x&gt;&gt;x; ...

Как правильно закрывать потоки ввода/вывода
Приветствую, Разбираюсь с потоками ввода вывода, в частности с их закрытием, смотрю примеры и удивляюсь - везде пишут по разному. Где...

ДНК - Как правильно организовать ввод и вывод данных
Для начала заметим,что поскольку по условию решение всегда существует,то количество букв каждого вида в первой строке равно количеству...

Как сделать ввод строки с пробелами в динамическом массиве структур?
Всем привет! У меня не получается ввести строку с пробелами. Ввожу, например: Audi TT, TT отбрасывает. Дальше из-за этого не получается...

Как правильно организовать ввод данных из текстового поля в форме?
Как правильно организовать ввод данных из текстового поля в форме? Пример для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru