Форум программистов, компьютерный форум CyberForum.ru

Требуется подкорректировать программу - C++

Войти
Регистрация
Восстановить пароль
 
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
10.01.2009, 14:40     Требуется подкорректировать программу #1
Код
#include <iostream>
using namespace std;

class phone_name {
	char name[20];
	long int phone;
public:
	void set_phone() { long int x; cin >> x; phone = x; }
	void set_name() { gets (name); }
	void show() { cout << name << " " << phone; }
};

void main() {
	phone_name *ob;
	ob = new phone_name;
	ob->set_phone();
	ob->set_name();
	ob->show();
}
Вопрос: Почему пропусукает и не выполняет функцию gets (name) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2009, 14:40     Требуется подкорректировать программу
Посмотрите здесь:

C++ Можете немного подкорректировать код?
C++ Помогите подкорректировать!
C++ Требуется дописать программу С++ сорировка
C++ Подкорректировать программу
Как можно упростить программу?(или подкорректировать) C++
Помогите подкорректировать программу C++
подкорректировать код (найти ошибки) C++
подкорректировать код(логин и пароль) C++
C++ Подкорректировать программу!
C++ подкорректировать программу со строками
Подкорректировать код (сортировка распределением) C++
Подкорректировать программу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
10.01.2009, 15:32     Требуется подкорректировать программу #2
Ты используешь перед этим такой вызов:
cin >> x;
что он делает? Грубо говоря, он считывает с потока строку, потом ее в int "превращает". Символ перехода на новую строку он оставляет в потоке. У тебя же не должен символ \n попасть в число? Вот следующим вызовом твоя gets и читает этот \n оставшийся в потоке, считая что ты ввел пустую строку. Это нормальное поведение, так и должно быть.
Вызывай два раза, чтобы избавится от этого. Желательно вызывать один раз сразу после ввода (чтобы в вызове функции сразу же убрать символ перехода из потока), чтобы не запутаться. Тогда после вызова гарантировано все будет работать, как ожидается при любом вызове.

Добавлено через 20 минут 22 секунды
Вот, посмотри здесь пример кода программы, в котором то же самое:
http://www.cyberforum.ru/cpp-beginne...post89643.html
Просто использовано два вызова get. Один - чтобы снять с потока, что там осталось, а второй, чтобы ожидать нажатия от пользователя.
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
10.01.2009, 15:45  [ТС]     Требуется подкорректировать программу #3
Спасибо большое, за полное объяснение. Все заработало.
Yandex
Объявления
10.01.2009, 15:45     Требуется подкорректировать программу
Закрытая тема Создать тему
Опции темы

Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru