Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

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

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

13.10.2011, 23:13. Просмотров 1689. Ответов 6
Метки нет (Все метки)

Господа, помогите!

нужна прога для слипания строк, не используя стандартный оператор конкатенации.
прога была написана и работала. теперь понадобилось переделать эту и еще несколько задач под классы и я столкнулась со следующей проблемой: gets() отказывается работать. при замене на cin прога работает правильно до первого пробела. в чем дело?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 23:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает оператор gets() (C++):

Не работает оператор if - C++
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> ...

Не работает оператор | - C++
Или я чего - то не понимаю, но разве он не должен добавлять биты? #include <windows.h> #include <iostream> #include <bitset> ...

Не работает оператор if else - C++
Всем привет :) Не могу понять , почему не работает оператор if else . Суть программы в том , что надо пройти тест и в конце подсчитать...

Не работает оператор if с сравнением (if (b == x) - C++
Здравствуйте у меня произошла проблемка => if не хочет сравнивать две переменных => #include <stdlib.h> #include <fstream> #include...

Не работает условный оператор - C++
Помогите пожалуйста. Третье else if по какой-то причине не работает. #include <iostream> #include <Windows.h> #include <string> ...

Почему не работает оператор if? - C++
Появилась проблема в моей программе, почему то в не зависимости от того какое действие я введу он выбирает Плюс и я не понимаю в чем...

6
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
13.10.2011, 23:14 #2
cin считывает до разделителя
0
Мартиника
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 43
13.10.2011, 23:23  [ТС] #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 сразу выходит:
Ввелите первую строку
Введите вторую строку
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
13.10.2011, 23:40 #4
значит у вас до этого был cin вызван, в буфере остался \n

перед вызовм gets, можете сделать cin.ignore()
1
hijacker7
20 / 20 / 1
Регистрация: 06.10.2011
Сообщений: 53
13.10.2011, 23:41 #5
А свой код с gets прислать можешь?
0
Мартиника
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 43
13.10.2011, 23:50  [ТС] #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() - то что нужно))
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
14.10.2011, 01:18 #7
Цитата Сообщение от Мартиника Посмотреть сообщение
но мб хоть кто-то объяснит мне как?
А кнопочки в редакторе сообщений (это куда вы посты пишите) "AS", "ASM"... "C", "C++" для красоты навешали?

Вообще странная у Вас проблема... В С++ fgets() вот так выглядит: std::getline(), да и вместо нуль-терминальной строки лучше std::string использовать...
0
14.10.2011, 01:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2011, 01:18
Привет! Вот еще темы с ответами:

Как работает оператор if? - C++
Народ! Операция сравнения возвращает ЧИСЛО, т.е. while и if принимают ЧИСЛО (0 - false, etc - true). Вопрос 1) Почему нельзя записать...

Не работает перегруженный оператор - C++
Привет, у меня есть класс такой: class Sterling { private: long pounds = 0; int shillings = 0; int pennys = 0; public:...

Не работает условный оператор - C++
Подскажите пожалуйста, почему чтобы я не вводил с клавиатуры, всегда выполняется действие 1? Вот вырезка из программы: int j; ...

Как работает оператор new? - C++
Обязательно ли использовать оператор delete в коде (см.ниже.).После использования оператора new старая область память выделенная для pStr...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.