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

Не работает оператор gets() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Мартиника
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 43
13.10.2011, 23:13     Не работает оператор gets() #1
Господа, помогите!

нужна прога для слипания строк, не используя стандартный оператор конкатенации.
прога была написана и работала. теперь понадобилось переделать эту и еще несколько задач под классы и я столкнулась со следующей проблемой: gets() отказывается работать. при замене на cin прога работает правильно до первого пробела. в чем дело?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
13.10.2011, 23:14     Не работает оператор gets() #2
cin считывает до разделителя
Мартиника
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 43
13.10.2011, 23:23  [ТС]     Не работает оператор gets() #3
я знаю, поэтому прошу подсказать, как мне быть с неработающим gets()
из-за чего он не работает?

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
void stroki:: vvod_dvuh_strok()
{
setlocale(LC_ALL,"");
cout<<" Ввелите первую строку\n";
cin(s2);
cout<<"Введите вторую строку\n";
cin>>s3;
}
я не совсем точно сформировала. при использовании gets никаких ошибок не выдается, но прога не требует ввода символов.
на экране при использовании gets сразу выходит:
Ввелите первую строку
Введите вторую строку
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
13.10.2011, 23:40     Не работает оператор gets() #4
значит у вас до этого был cin вызван, в буфере остался \n

перед вызовм gets, можете сделать cin.ignore()
hijacker7
19 / 19 / 1
Регистрация: 06.10.2011
Сообщений: 53
13.10.2011, 23:41     Не работает оператор gets() #5
А свой код с gets прислать можешь?
Мартиника
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 43
13.10.2011, 23:50  [ТС]     Не работает оператор gets() #6
теги конечно надо ставить, об этом мне напомнят, но мб хоть кто-то объяснит мне как?)))
а вот код:
с gets() обычная рабочая прога:
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
char concat(char*s1, char*s2, char*s3)
{
do
{
*s1=*s2;
*s1++;
*s2++;
}
while(*s2 !='\0');
do
{
*s1=*s3;
*s1++;
*s3++;
}
while(*s3 !='\0');
*s1='\0';
return *s1;
}
 
void concat1()
{
char s2[20];
char s3[20];
char s1[20];
setlocale(LC_ALL,"");
cout<<"ВВедите первую строку: \n";
gets(s2);
cout<<"ВВеди вторую строку: \n";
gets(s3);
 
concat(s1,s2,s3);
cout<< s1 << endl;
_getch();
}
 
вот уже под классы:
 
char stroki::concat(char*s1, char*s2, char*s3)
{
do
{
*s1=*s2;
*s1++;
*s2++;
}
while(*s2 !='\0');
do
{
*s1=*s3;
*s1++;
*s3++;
}
while(*s3 !='\0');
*s1='\0';
return *s1;
}
 
void stroki:: vvod_dvuh_strok()
{
setlocale(LC_ALL,"");
cout<<"ВВеди первую строку: \n";
gets(s2);
cout<<"ВВеди вторую строку: \n";
gets(s3);
}
 
 
void stroki:: st(){
concat(s1,s2,s3);
cout<< s1 << endl;
_getch();
}
 
вызов этой ф-и:
void menu_class(){
  setlocale(LC_ALL, "");
  int p;
stroki t;
  do{
    system("cls");
    cout<<"\n ÏîäìåГ*Гѕ ";
    cout<<"\n 1)Слияние двух строк"<<endl;
    cout<<"\n 2)ÄëèГ*Г* ñòðîêè"<<endl;
    cout<<"\n 3)ÂåðГ*ГіГІГјГ±Гї Гў ГЈГ«Г*ГўГ*îå ìåГ*Гѕ"<<endl;
    cin>>p;
    system("cls");
    switch(p){
    case 1:{ t.vvod_dvuh_strok();   
     t.st();
         _getch();
            break;
            } 
    case 2:{ cout<<"fdg";
             break;}
             
}}
       
  while (p!=3);
  _getch();
}
Добавлено через 1 минуту
CПАСИИИБООО!!!!
cin.ignore() - то что нужно))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 01:18     Не работает оператор gets()
Еще ссылки по теме:

Почему не работает оператор if? C++
C++ Не работает перегруженный оператор
C++ Не работает оператор |
C++ Не работает оператор if
C++ Не работает оператор if else

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
14.10.2011, 01:18     Не работает оператор gets() #7
Цитата Сообщение от Мартиника Посмотреть сообщение
но мб хоть кто-то объяснит мне как?
А кнопочки в редакторе сообщений (это куда вы посты пишите) "AS", "ASM"... "C", "C++" для красоты навешали?

Вообще странная у Вас проблема... В С++ fgets() вот так выглядит: std::getline(), да и вместо нуль-терминальной строки лучше std::string использовать...
Yandex
Объявления
14.10.2011, 01:18     Не работает оператор gets()
Ответ Создать тему
Опции темы

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