Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: почему cin.getline не работает?  (Прочитано 12284 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anonymous
Гость
« : 06-09-2003 22:48 » 

участок кода

int PORT
char ADDRESS[256]
char TXT[256]
глобальные переменные



scanf("%n",PORT);
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));

последний cin.getline(TXT,sizeof(TXT)); - просто игнорирует

а если поменять порядок ввода на

cin.getline(TXT,sizeof(TXT));
scanf("%n",PORT);
cin.getline(ADDRESS,sizeof(ADDRESS));

то всё будет работать. Что такое? Не подскажете?
Записан
Serega
Гость
« Ответ #1 : 07-09-2003 07:39 » 

sizeof работает как надо, весь массив в стеке, sizeof вернет его размер в байтах
а вот использовать cin вместе со scanf не очень хорошая идея
лучше так
Код:
cin >> PORT;
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));
« Последнее редактирование: 19-11-2007 17:58 от Алексей1153++ » Записан
Anonymous
Гость
« Ответ #2 : 07-09-2003 11:53 » 

Не, если cin >> PORT; ставлю, то всё таж е фигня  Жаль  Жаль  Жаль
Записан
Serega
Гость
« Ответ #3 : 07-09-2003 12:33 » 

Во я ступил Отлично
у тебя в потоке следующее: #port#\n#address#\n#txt#\n
читаем port, остается \n#address#\n#txt#\n (обращаем внимание на \n в начале)
читаем address, остается #address#\n#txt#\n (т.к. по умолчанию getline читает до \n)
читаем txt, остается #txt#\n

решение
Код:
cin >> PORT;
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));
« Последнее редактирование: 19-11-2007 17:59 от Алексей1153++ » Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 07-09-2003 15:13 » 

А почему нельзя так:
Код:

cin >> PORT;
cin >> ADDRESS
cin >> TXT

Из угрозы превышения размера переменной?
или может использовать getdelim()
Записан

Странно всё это....
Serega
Гость
« Ответ #5 : 07-09-2003 15:17 » 

если ADDRESS и TXT типа string то можно и так, но надо поставить что бы пробел не был разделителем иначе считается только первое слово
Записан
Serega
Гость
« Ответ #6 : 07-09-2003 19:26 » 

что-то у меня не вышло поменять разделитель, видимо всетаки getline придется использовать
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #7 : 07-09-2003 19:51 » 

и это правильно иначе потенциально есть уязвимость доющая выполнить произвольный код!
Записан

Странно всё это....
NetRaider
Гость
« Ответ #8 : 11-09-2003 05:18 » 

Цитата
решение
Код:
Код:
cin >> PORT;
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));

Лучше так:
Код:
cin >> PORT;
cin.ignore();
cin.getline(ADDRESS, sizeof(ADDRESS));
cin.getline(TXT, sizeof(TXT));
« Последнее редактирование: 19-11-2007 18:05 от Алексей1153++ » Записан
dorador
Гость
« Ответ #9 : 11-09-2003 08:41 » 

предлагаемый код
Код:
int PORT
char ADDRESS[256]
char TXT[256]
scanf("%n",PORT);
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));
исправил на
Код:
int PORT;
char ADDRESS[256] ;
char TXT[256] ;
scanf("%n",&PORT);
cin.getline(ADDRESS,sizeof(ADDRESS));
cin.getline(TXT,sizeof(TXT));
все работает, только значение PORT получает не с клавы, а некое "количество символом, считанных до сих пор"(цитата из Шилдта)
а если исправить на
scanf("%i",&PORT);
то PORT получит число с клавы
все проверил под VC++ 6.0
« Последнее редактирование: 19-11-2007 18:07 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines