Помощь - Поиск - Пользователи - Календарь
Полная версия: последовательность чисел
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Client
Дана последовательность чисел, 0 - ее конец. Определить, сохраняет ли она знак.
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused
int _tmain()
{
int a,b;
bool y=true;
cin >>a >> b;
if (a==0 || b==0) {
cout<<"DA";
getchar();
return 0;
}
else
while (y && b!=0)
{
a=b;
cin>>b;
if (b!=0) {
y=a*b>0;
}
}
if (y) {
cout<<"DA";
}
else
{
cout<<"NET";
}
getchar();
getchar();

return 0;
}
//---------------------------------------------------------------------------
Почему, если ответ ДА то есть задержка экрана, если НЕТ то консоль закрывается сразу? Или лучше задержку экрана делать через cin или есть другой способ?
Archon
Используй
system("PAUSE");
, Люк.
volvo
Цитата
Почему, если ответ ДА то есть задержка экрана, если НЕТ то консоль закрывается сразу?
У тебя "Да" выводится в двух местах, если ты не заметил. Какой из них работает нормально?

В общем случае работает не так, как ожидается, потому, что после того, как ты ввел число, ты нажал на Enter. cin считал число, а код Enter-а остался в буфере. Теперь понятно, почему getchar не задерживает выполнение программы? Да потомы, что он читает излишки Enter-ов, которые есть в буфере. После чтения числа опустошай поток, и все будет работать нормально.

Добавлено через 1 мин.
Archon, это не метод. Нужно править недочет в коде, а не маскировать его так, чтобы не было заметно. Ибо не вылезет сейчас - вылезет потом...
Client
Цитата
Какой из них работает нормально?
Да, при первом ДА стоит 1 getchar, но и во втором случае, где 2 getchar, если ДА то задержка есть, иначе нету.
А как очистить поток?
volvo
С помощью istream::ignore, например:
cin.ignore(numeric_limits<streamsize>::max(),'\n') ;
Client
Цитата
cin.ignore(count, delim) - игнорировать count символов или пока не встретится символ разделитель delim. Символ разделитель заключается в апострофы ' '.
Значит можно смело писать
cin.ignore(255,'\n');
?
volvo
То есть, ты на 100% уверен, что
1) в твоей реализации в поток может поместиться 255 символов
2) что все FAQ-и вот этот, например и советы написаны полудурками, которые вместо того, чтобы написать 255 пишут какую-то ненужную ахинею?

В таком случае извини, это решение "будет работать и фиг с ним. КАК ОНО РАБОТАЕТ - МНЕ НЕВАЖНО". Я в таких обсуждениях участия не принимаю. Программирование - слишком серьезная вещь, чтоб так наплевательски к нему относиться.
Client
извини, но я что-то не понял это
Цитата
что все FAQ-и вот этот, например и советы написаны полудурками, которые вместо того, чтобы написать 255 пишут какую-то ненужную ахинею?
Скопировал кусочек программы в примере по ссылке (15.3) и ругается на строке
Цитата
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Т.е. в этом примере и есть ошибка?
Krjuger
А можно поинтересоваться,а ты подключил билбиотеку limits ,если внимательно посмотреть,то в исходной посте она присутствует,а ты ничего про это не упомянул.И еще почему ты так упорно используеш iostream.h,когда тебе уже каждый сказал,что лучше использовать iostream.
Client
Цитата
билбиотеку limits...
кажется, я слепой....
volvo
Я, если честно, вообще не вижу смысла делать 2 точки, в которых может завершиться выполнение программы. Вот так, скажем:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
#include <iostream>
#include <limits>

//---------------------------------------------------------------------------
#pragma argsused

using namespace std;

int _tmain()
{
int a, b;
bool y = true;
cin >> a >> b;

if(a && b) // Я перевернул условие
{
while (y && b != 0)
{
a = b;
cin >> b;
if (b != 0)
{
y = a * b > 0;
}
}
}

if (y) {
cout<<"DA";
}
else
{
cout<<"NET";
}
cin.ignore(numeric_limits<streamsize>::max(),'\n'); // Чистим поток
cin.get(); // Все-таки ждем нажатия, чтоб увидеть результат
return 0;
}
будет более читаемо...
Client
хитрая штука этот поток... smile.gif
Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.