Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с cin.get() 
:(
    Опции темы
Hawaii
Дата 31.7.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.6.2007

Репутация: нет
Всего: нет



Пытаюсь ввести две строки через cin.get(). Первая строка вводится, а вторая нет. В чем проблема?
Программа сравнивает две строки (моя версия strcmp(str1, str2)... )

Код

#include <iostream>
using namespace std;
int compstr(char* s1, char* s2)
{
    int Longest;
    int leS1 = strlen(s1);
    int leS2 = strlen(s2);
    if (leS1 > leS2) {Longest = leS1;}
    if (leS1 < leS2) {Longest = leS2;}
    if (leS1 == leS2) {Longest = leS2;}
if(*s1 < *s2) {return -1;} // Сравнение по первому символу
if(*s1 > *s2) {return 1;}  // Сравнение по первому символу
if(*s1 == *s2)  // Если первые символы равны,
  {
  for (int j=0; j<Longest; j++)
     {
     *s1++; s2++;     // Сравниваем следующие
     if(*s1 < *s2) {return -1;} // Сравнение следующих символов
     if(*s1 > *s2) {return 1;}  // Тоже самое
     // Если все символы равны, то и строки равны, следов.
     } 
  return 0;  //  возвращаем 0.
  }

}
int main()
{
    const int MAX = 80;
    char str1[MAX];
    char str2[MAX];
    int number;
    cout << "Enter string(1): "; cin.get (str1, MAX);    
    
    cout << "Enter string(2): "; cin.get (str2, MAX);

    number = compstr(str1, str2);
    if (number>0) {cout << "string(2) идет первой по алфавиту ";}
    if (number==0) {cout << "string(2) равна string(1) ";}
    if (number<0) {cout << "string(2) идет позже по алфавиту ";}
    
    system("PAUSE");
    return 0;    
}


Это сообщение отредактировал(а) Hawaii - 31.7.2007, 01:12
PM MAIL   Вверх
JackYF
Дата 31.7.2007, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Hawaii @  31.7.2007,  01:11 Найти цитируемый пост)
моя версия strcmp(str1, str2)...

Извини, но никакой критики по производительности не выдерживает. Хорошая функция как минимум не должна вызывать strlen и иметь так много ветвлений. Кроме того, функция сравнения должна принимать аргументы типа const char*.


Цитата(Hawaii @  31.7.2007,  01:11 Найти цитируемый пост)
две строки через cin.get().

юзай cin.getline()

и в случае чего, после ввода первой строки cin.sync(), хотя не должно понадобиться.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Kuvaldis
Дата 31.7.2007, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Hawaii, 
Проблема в том, что метод get() работает и принимает символы до того момента, пока не встретит символ окончания (по умолчанию "ввод") Все что до ВВОДА, заносится в буфер, но сам символ \n из очереди клавы НЕ УБИРАЕТСЯ
Выход: между вызовами cin.get() поставить cin.ignore(), чтобы выкинуть ненужный символ и вводить новую строку 
P.S. Это при условии, что ты вводишь строки через нажатие ВВОДА
А вообще, правильно сказал JackYF: юзай getline()

Добавлено через 38 секунд
Код

cin.get(s1, 10);
cin.ignore();
cin.get(s2, 10);



--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
NoNo
Дата 31.7.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



разберись с потоками....


PM MAIL   Вверх
Predator_2004
Дата 3.8.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 26.4.2007

Репутация: нет
Всего: нет



Попробуй так:
Код

char str[256];
gets(str);

PM MAIL   Вверх
Rockie
Дата 3.8.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Лучше gets_s




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Mayk
Дата 3.8.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Rockie @  3.8.2007,  16:21 Найти цитируемый пост)
Лучше gets_s

Строго говоря её нет в стандартах. В си есть fgets(); 

Цитата(JackYF @  31.7.2007,  06:03 Найти цитируемый пост)

юзай cin.getline()

ИМХО getline(cin, str)  удобнее cin.getline(buf,bufsize) 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Dronchik
Дата 5.8.2007, 12:40 (ссылка)   | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



И ещё. С какого ... консоль выведет русские буквы. Нужно выставить локаль или плоьзоваться функцией CharToOem.


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.