Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Возврат из функции "printf" и "break"


Автор: Killer_13 1.5.2009, 17:51
В функции проверяется на деление на нуль, тоисть если определенное значение равно нулю, соответственно на "0" делить нельзя, нужно чтоб ф-ция возвращала сообщение о ошибке и завершала программу.

Вот код моей ф-ции.
Она возвращает 1 значение типа "double" а как записать, чтоб возвращала или значение типа "double" или сообщение о ошибке и завершала программу
Спасибо.

Код

double f1 (double x)
{
double y;

if ((y=-sin(x)-1) != 0)
return y;
else
return printf("Falsche Eingabe!\n");
}

Автор: bsa 1.5.2009, 18:12
Killer_13, для завершения из любого места программы воспользуйся функцией exit() (stdlib.h)

Автор: TrЭin3e 1.5.2009, 18:17
а зачем это вообще? не проще ли сделать, чтобы прога сначала выводила сообщение об ошибке, а потом возвращала необходимое значение?

Автор: bsa 1.5.2009, 18:20
TrЭin3e, сколько будет  348 делить на 0?

Автор: Killer_13 1.5.2009, 18:24
bsa У меня задумка просто такая, нужно сделать с помощью ф-ции.
Ошибку выдает.

Код

double f1 (double x)
{
double y;

if ((y=-sin(x)-1) != 0)
return y;
else
{
return printf("Falsche Eingabe!\n");
exit();
}
}


TrЭin3e - если знаете - подскажите, - нужно сделать то, что я спрашиваю, с помощью этой ф-ции. Это возможно?

Автор: bsa 1.5.2009, 18:26
Killer_13, а ты не догадался посмотреть документацию на функцию, что я тебе сказал? Более того, думаю, что компилятор тоже тебе дал вполне разумное описание твоей проблемы.

Добавлено через 2 минуты и 34 секунды
Killer_13, после return, кстати, код не выполняется. поэтому, на твоем бы месте, я убрал return перед printf, так как результат этой функции для тебя значения не имеет.

Автор: Killer_13 1.5.2009, 18:36
почитал.
Описал прототип

Код

void exit();


мой код

Код

double f1 (double x)
{
double y;

if ((y=-sin(x)-1) != 0)
return y;
else
exit();
}


сама ф-ция

Код

void exit()
{
printf("Error");
}


Опять ошыбка, и пишет с типами данных, потому, что там пустое значение, а там доубле?

Автор: math64 1.5.2009, 18:43
если прогоммируешь C, используй longjmp:
Код

#include <stdio.h>
#include <setjmp.h>

jmp_buf jmp;
double fl(double x) {
  if (x == 0)
    longjump(jmp, 1);
  return 1/x;
}

int main(int argc, char** argv)
{
  double x, y;
  if (setjump(jmp) == 0) {
    x = 0;
    y = fl(x);
    printf("%f\n", y);
  } else {
    printf("zero division\n");
  }
}


Если C++, try/catch
Код

#include <stdio.h>

double fl(double x) {
  if (x == 0)
    throw x;
  return 1/x;
}

int main(int argc, char** argv)
{
  double x, y;
  try {
    x = 0;
    y = fl(x);
    printf("%f\n", y);
  } catch(double z) {
    printf("zero division\n");
  }
}


Автор: bsa 1.5.2009, 18:47
Killer_13, не знаю, что ты читал: http://www.cl.cam.ac.uk/cgi-bin/manpage?3+exit

Автор: Killer_13 1.5.2009, 18:48
math64
Пасибо за код, но в том то и разница, на С я пока не программирую, я только учусь.
Мне че т попроще нужно., например, то что я спрашивал, а то опять препод нагрузит. Нужно самому делать.
Я хотел сделать так, чтоб не переделывать целую программу из-за этой проверки деления на нуль.
Вот так. :( Если вариантов нет, придется переделывать, и делать другим способом.

Добавлено через 4 минуты
:(:(:( Эххх, еще бы инглиш понимал. :(

Автор: math64 1.5.2009, 19:00
Если нужно просто напечатать сообщение и выйти 
Код

#include <stdio.h>
#include <stdlib.h>

double fl(double x) {
  if (x == 0) {
    printf("zero division\n");
    exit(1);
  }
  return 1/x;
}
 

Автор: Killer_13 1.5.2009, 19:11
math64 спасибо - эт именно то, на что я и надеялся получить подсказку или ответ.
bsa спасибо за правильные поучения. smile
Вопрос решен. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)