Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » cin и cout корректно ли работают в MSVC 6.0?

Ответить
Настройки темы
cin и cout корректно ли работают в MSVC 6.0?

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Никогда не любил ни cin ни cout
Но вот себе пример копирую с сопровождающего диска (авторы компилировали точно не на MSVC)
Вот пример:
Код: Выделить весь код
 
 * *string * * * *strID; 
 * *string * * * *strName; 
 * *int * * * * * intPrice; 
 
 * *cout << "Add Products:\n"; 
 * *while(1) 
 * *{ 
 * * * *cout << "ID (Type 0 to finish): "; 
 * * * *getline(cin, strID); 
 * * * *if (strID == "0") * *break; 
 
 * * * *cout << "Name * * * * * * * * : "; 
 * * * *getline(cin, strName); 
 * * * *cout << "Price * * * * * * * *: "; 
 * * * *cin *>> intPrice; 
 * * * *cin.ignore(); 
 
 * * * *mProducts[strID] = new Product(strID, strName, intPrice); 
 * * * *cout << "Product added to the list\n\n"; 
 * *}
Несмотря на внешнюю прозрачность происходит следующее:
вместо того, чтобы завершить ввод по первому getline (после Enter) мне выдается еще одна строка, вроде как относящаяся к тому же getline. Если смотреть по trace то эта вторая строка не запоминается.
Приблизительно повторяется то же, что и в первом случае со вторым getline.
Ввести price не удается, он срывается с места и считает что я везде ввел по нулям и зацикоивается в этом while(1)
простенькие cin и cout срабатывали у меня раньше...

здесь http://forum.oszone.net/topic.cgi?fo...&start=0#0
прочитал

Вероятнее всего причина в том, что в проверяющей системе стоит компилятор MSVC 6.0 и там замечено много глюков с STL

Бороться с этим можно, может знает кто? Патч специальный например какой-нибудь....
А то я задумал активно использовать STL в своей программе, а тут даже рабочий пример "нерабочий". Обидно

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 21:59, 22-06-2003

 

Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Crew
Это getline виновата. Она всегда в буфере оставляет CR/LF. Нужно буфер чистить.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 17:32, 24-06-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


shurikan
Не могу вспомнить замену cin.ignore(), но она ведь должна извлекать и уничтожать данные из потока.
Если не сложно, как можно переписать ввод нескольких слов из потока?
т.е. я не смог изобразить у себя ввод с клавиатуры нескольких слов, чтоб они в одну переменную заносились (раньше книга была, где это описывалось, но кто-то заиграл)

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 22:09, 26-06-2003 | #3


Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Вот этот код нормально работает на билдере 6 и наверняка то же будет и в других оболочках:


Код: Выделить весь код
 
//--------------------------------------------------------------------------- 
#include <iostream.h> 
 
#include <string> 
 
//--------------------------------------------------------------------------- 
 string strID; 
 string strName; 
 int intPrice; 
int main() 
{ cout <<"Add Products:\n"; 
while(1) 
{cout<<"ID (Type 0 to finish): *"; 
 
 getline(cin,strID); 
 if(strID=="0")break; 
 cin.ignore(0,'\n'); 
 
cout<<"\nName * * * * * * :"; 
 
getline(cin,strName); 
 cin.ignore(0,'\n'); 
 
 
while(1){ cout<<"\nPrice * * * * * * :"; 
 
cin.unsetf(ios::skipws); 
 * 
cin>>intPrice; 
if(cin.good()) {cin.ignore(1000,'\n');break;} 
 cin.clear(); cout<<"\nInvalid Price. Try again."; 
 cin.ignore(1000,'\n'); 
} 
mProducts[strID]=new Product(strID,strName,intPrice); 
 * 
 cout<<"\nProduct added to the list\n\n"; 
 
} 
 
 
 
 
 * * * *return 0; 
} 
//---------------------------------------------------------------------------

-------
Извините, это опять я


Отправлено: 19:23, 28-06-2003 | #4


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


ID (Type 0 to finish):  stID
k

Name             :just name

Price             :
Invalid Price. Try again.
Price             :

Результат работы вышепрведенного кода :
Vla2003
большое спасибо, но dиновата я думаю MSVC,
попробую этот код в другом компиляторе опробовать

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 21:07, 28-06-2003 | #5


Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Crew
Цитата:

Full Member Редактировать | Профиль | ICQ | Цитировать


ID (Type 0 to finish):  stID
k

Name             :just name

Price             :
Invalid Price. Try again.
Price             :

Результат работы вышепрведенного кода :
Vla2003
Попробуй убрать cin.unsetf(ios::skipws);    - это только, чтобы вместо цифр не нажимали ENTER

-------
Извините, это опять я


Отправлено: 08:59, 29-06-2003 | #6


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Vla2003
Price я вообще не ввожу, прошу прощения, что не пояснил. Где есть текст, там программа дает мне ввести код, где нет, он просто проскакивает. если б не блок корректности, то была бы та же зацикленность (а она и осталась) что и первый раз, только тут меня вежливо просят повторить

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 21:06, 01-07-2003 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » cin и cout корректно ли работают в MSVC 6.0?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
*SOFT* | Qt 4 и MSVC 6 patison Программирование и базы данных 5 31-08-2006 01:07
не корректно работает RunOnceEx Stile Автоматическая установка приложений 2 07-02-2006 20:16
БД и MSVC++ lehha Программирование и базы данных 3 10-06-2005 09:48
Размер ЕХЕ в MSVC++. Sage Программирование и базы данных 11 06-01-2004 15:36
Меню в MSVC++ 6.0 Sage Программирование и базы данных 1 23-04-2003 16:37




 
Переход