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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2008, 17:34   #1
v01umE
Пользователь
 
Аватар для v01umE
 
Регистрация: 30.05.2008
Сообщений: 18
По умолчанию Проблема с char

Есть такой вот код.
Код:
#include <iostream>
#include <conio.h>

using namespace std;

void First();
void Second();

void Repeat()
{
 cout << "To repeat? (y/n)\n>";
 
 char c;
 cin >> c;
 if(c=='y') {
  cout << "\n";
  First(); }
}

void First()
{
  cout << "Enter the first string: ";
 char s[50];
 cin.getline(s, sizeof(s));
 Second();
}

void Second()
{
  cout << "Enter the second string: ";
 char s[50];
 cin.getline(s, sizeof(s));
 Repeat();
}

int main()
{
 cout << "Hello! Enter some value." << endl;
 getch();
 
 First();
 return 0;
}
Вот что получается:

C:\programm.exe

Hello! Enter some value.
Enter the first string: first
Enter the second string: second
To repeat? (y/n)
>y

Enter the first string: Enter the second string: second
To repeat? (y/n)
>y
...

То, что выделенно красным, мне нужно исправить, чтоб было, как при первом вызове First(), и чтобы можно было вводить строку с пробелами ( "cin >> s" работает на ура) .
P.S. Программа пропускает ввод первой s при повторных вызовах First() .
v01umE вне форума Ответить с цитированием
Старый 03.07.2008, 17:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

пробуй так:
Код:
cout << "Enter the second string: \n";
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2008, 18:31   #3
v01umE
Пользователь
 
Аватар для v01umE
 
Регистрация: 30.05.2008
Сообщений: 18
По умолчанию

Ты меня не правильно понял. Программа пропускает ввод
Код:
First()
{
...
 cin.getline(s, sizeof(s));
...
}
при повторном вызове First(), как будто этой строки ввода нету. "cout" тут не при чём.
v01umE вне форума Ответить с цитированием
Старый 03.07.2008, 21:20   #4
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

После
Цитата:
Сообщение от v01umE Посмотреть сообщение
Код:
cin >> c;
В буфере std::cin остается символ '\n'. std::cin.getline() читает строку, т.е пока не встретит символ '\n', а он в самом начале – поэтому происходит псевдо игнорирование (на самом деле все работает верно).

Чтобы устранить символ перехода на новую строчку нужно или сбросить поток вообще, а лучше просто сказать std::cin проигнорировать 1 символ.
Код:
cin >> c;
cin.ignore();
filosof_x86 вне форума Ответить с цитированием
Старый 03.07.2008, 21:37   #5
v01umE
Пользователь
 
Аватар для v01umE
 
Регистрация: 30.05.2008
Сообщений: 18
По умолчанию

Спасибо. Теперь всё работает. :-)
v01umE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
char в wchar_t softrix Общие вопросы C/C++ 5 08.11.2010 15:40
char to int kezman Общие вопросы C/C++ 3 24.07.2008 08:59
из char в int llin Общие вопросы C/C++ 13 11.07.2008 06:51
из char в int?? Mika Общие вопросы C/C++ 4 20.06.2008 15:18
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17