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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 16:46   #1
FoxyFire
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 11
По умолчанию Неправильная работа gets() (C++)

Здравствуйте. Такой вопрос:

Код:
struct form //форма заявки
{
	char des[20];
	char name[20];
	char data[10];
};

void main()
{
	form tmp;
	cout << "Введите дату в формате дд/мм/гг: ";
	gets(tmp.data);
	cout << "Введите пункт назначения: ";
	gets(tmp.des);
	cout << "Введите фамилию и инициалы пассажира: ";
	gets(tmp.name);
	system("pause");
}
По идее отработка должна быть:

Введите дату в формате дд/мм/гг: (ввод текста)23/09/15
Введите пункт назначения: (ввод текста)Москва
Введите фамилию и инициалы пассажира: (ввод текста)Иванов И.И.

А отрабатывает:

Введите дату в формате дд/мм/гг: Введите пункт назначения: Введите фамилию и инициалы пассажира: (и только здесь включается ввод текста)Иванов И.И.

Почему, объясните?

Последний раз редактировалось Аватар; 23.09.2015 в 17:28.
FoxyFire вне форума Ответить с цитированием
Старый 23.09.2015, 17:38   #2
FoxyFire
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 11
По умолчанию

Понял, что буфер клавиатуры уже содержит '\n' и его нужно ощищать с помощью fflush(stdin). Я прав? И есть другие способы решения?
FoxyFire вне форума Ответить с цитированием
Старый 23.09.2015, 17:50   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В моем GCC твой код отработал норм, только я cout на printf заменил, ибо проект не плюсовый сделал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2015, 17:53   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Используйте fgets, хотя бы чтобы избежать простого "переполнения" буфера.
Цитата:
Понял, что буфер клавиатуры уже содержит '\n'
getchar? fgetc? getc?
Croessmah вне форума Ответить с цитированием
Старый 23.09.2015, 17:58   #5
FoxyFire
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 11
По умолчанию

C printf тот же результат.

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Используйте fgets, хотя бы чтобы избежать простого "переполнения" буфера.

getchar? fgetc? getc?
Эти команды принимают только один символ из потока вроде как. (Хотя возможно я не понял описание)

Последний раз редактировалось Stilet; 23.09.2015 в 19:14.
FoxyFire вне форума Ответить с цитированием
Старый 23.09.2015, 19:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
C printf тот же результат.
А что за компилятор у тебя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2015, 01:38   #7
FoxyFire
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что за компилятор у тебя?
MSV 2010 Express
FoxyFire вне форума Ответить с цитированием
Старый 24.09.2015, 07:48   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну не знаю... Замени gets() на getline() наверное. И массив char в твоей структуре на string-и
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2015, 16:43   #9
FoxyFire
Пользователь
 
Регистрация: 23.09.2015
Сообщений: 11
По умолчанию

А string можно както сравнивать (к примеру как для char массивов strcmp())?
FoxyFire вне форума Ответить с цитированием
Старый 24.09.2015, 17:40   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Обычным == должно сравниваться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неправильная работа програмы 3Doleg Общие вопросы C/C++ 3 23.09.2013 20:10
неправильная работа программы... fkty Помощь студентам 4 05.06.2013 16:20
неправильная работа keybd_event chertovich Win Api 3 07.01.2012 14:52
неправильная работа программки. Rafff Общие вопросы C/C++ 6 05.04.2010 15:16
Неправильная работа switch в while konstantinopol Общие вопросы C/C++ 3 24.01.2009 03:51