#include <locale.h>
#include <iostream>
#include <process.h>
using namespace std;
int main ()
{ setlocale(LC_CTYPE,"Russian");
unsigned long i,j;
cout << "Введите число " ;
cin >> i;
for (j=2; j<=i/2; j++)
if (i%j == 0)
{
cout << "Введенное число " << i << " не простое" << endl;
exit(0);
}
cout << "Введенное число " << i << " простое" << endl;
cin.get();
cin.get();
return 0;
}
exit(0)
Код:
Когда ввожу простое число поток cout работает и я могу прочитать сообщение которое в него передалось, но вот при вводе не простого числа программа завершается , а я ведь хочу получить еще сообщение о том что оно не простое почему так происходит?
Код:
cout << "Введенное число " << i << " не простое" << endl;
cin.get();
cin.get();
return 0;
cin.get();
cin.get();
return 0;
MaitreDesir просто в книжке приводится такой пример , и при работе программы там выводится два потока понимаете вот в чем дело, тоесть при вводе простого числа выводится, и при вводе не простого почему?
http://www.cplusplus.com/reference/clibrary/cstdlib/exit/.
Так будет грамотней, но только я наверное наврал с синтаксисом - дельфист я, не помню как там чо в сях. Но идея думаю понятна, разберешся.
Книжка знать кривая. Читай от это:
Цитата:
Terminate calling process
Terminates the process normally, performing the regular cleanup for terminating processes.
Terminates the process normally, performing the regular cleanup for terminating processes.
Exit немедленно завершает процесс, больше никакие комманды выполняться не будут (что бы ты не написал). В принципе, увидеть результат работы можно, если запускать прогу из консоли. Попробуй запустить cmd, с помощью cd перейти в каталог с твоей программой и запустить её - увидишь, что число не простое.
А вообще, по хорошему, надо бы сделать так:
Код:
#include <iostream>
#include <process.h>
using namespace std;
int main ()
{ setlocale(LC_CTYPE,"Russian");
unsigned long i,j;
bool f=true;
cout << "Введите число " ;
cin >> i;
for (j=2; j<=i/2; j++)
{
f = f && (i%j == 0)
if !f
break;
}
cout << "Введенное число " << i ;
if f
cout " простое" << endl;
else
cout " не простое" << endl;
cin.get();
cin.get();
return 0;
}
#include <process.h>
using namespace std;
int main ()
{ setlocale(LC_CTYPE,"Russian");
unsigned long i,j;
bool f=true;
cout << "Введите число " ;
cin >> i;
for (j=2; j<=i/2; j++)
{
f = f && (i%j == 0)
if !f
break;
}
cout << "Введенное число " << i ;
if f
cout " простое" << endl;
else
cout " не простое" << endl;
cin.get();
cin.get();
return 0;
}
Так будет грамотней, но только я наверное наврал с синтаксисом - дельфист я, не помню как там чо в сях. Но идея думаю понятна, разберешся.
И запомни - никогда, кроме совсем крайних случаев (если они случаться ты узнаешь, а пока никогда), не используй функцию exit для выхода из программы. Это очень криво и не правильно. Даже уже в такой маленькой программе ты напоролся на ошибку из-за этого. В большой программе последствия могут быть намного хуже.
Цитата: aks
При этом ни какие ресурсы корректно не освобождаются если они заняты. А cout буферизует вывод. Естественно при немедленом завершении процесса он не успевает скинуть буфер, поэтому ты и не видишь текст.
O_o.
Я может быть не знаю, aks, поясни плиз..
Цитата:
performing the regular cleanup for terminating processes.
"выполнялняет стандартную очистку при завершения процесса".
У себя щас потестил - вывелось... Объясни плиз, почему может не вывести, если теоретически он должен кидать все буферы?
Но насчет использования Exit согласен, индусизм.. Потому и предложил другой вариант
Э, насколько я помню - он как раз не гарантировано сбрасывает буфер. Особено если обработчики exit не корректно завершились. Хотя конечно могу ошибаться - надо почитать документацию. В любом случае использовать exit просто для выхода - очень плохо. Ибо помимо stdio может быть еще куча ресурсов которые автоматически не освобождаюся. Да и вобще прерывать нормальный процесс завершения программы - некорректно. За исключением некоторых случаев. Допустим, когда форк сделали в начале, и старый процесс совсем не нужен - нужно полностью его выгрузить немедлено.
Делали одну десктопную софтинку лет 6 назад. И для декодирования видеокадров приходящих из сети юзали какую то довольно известную для тех нужд на то время открытую библиотеку (сейчас название не скажу за давностью). И вот софтинка иногда внезапно, никого не предупредив закрывалась. Тоесть пользователь работает, там из сети данные получает, какие то параметры не сохранил и тут бац - окно исчезает без предупреждения и все.
После нудного дебага (надож еще момент было поймать когда она выходит) нашли - в этой либе просто вымораживающий код. Не знаю то ли это от какого то старого дебага разработчиков осталось то ли просто кто то с будуна говнокод написал - но для либы такое не простительно. В некоторых случаях, довольно редких, если кадр был сформирован особым, по мнению либы не правильным образом, она не возвращала никакую ошибку с описанием, а просто делала exit. Вот так никого не предупредив. :facepalm:
Скорее всего, все очень просто: запускай свою кривопрогу в cmd (в командном процессоре). А то окно закрывается, не дожидаясь нажатия каких-нибудь клавиш, что вполне понятно, т. к. в программе и не заложено ожидать