Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возврат из функции "printf" и "break", выводить сообщение о ошыбке и "break" 
V
    Опции темы
Killer_13
Дата 1.5.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



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

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

Код

double f1 (double x)
{
double y;

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


Это сообщение отредактировал(а) Killer_13 - 1.5.2009, 17:54
PM MAIL   Вверх
bsa
Дата 1.5.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



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

Это сообщение отредактировал(а) bsa - 1.5.2009, 18:13
PM   Вверх
TrЭin3e
Дата 1.5.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 28.3.2009
Где: Ставрополь

Репутация: нет
Всего: 1



а зачем это вообще? не проще ли сделать, чтобы прога сначала выводила сообщение об ошибке, а потом возвращала необходимое значение?
PM MAIL   Вверх
bsa
Дата 1.5.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



TrЭin3e, сколько будет  348 делить на 0?
PM   Вверх
Killer_13
Дата 1.5.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



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

Код

double f1 (double x)
{
double y;

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


TrЭin3e - если знаете - подскажите, - нужно сделать то, что я спрашиваю, с помощью этой ф-ции. Это возможно?
PM MAIL   Вверх
bsa
Дата 1.5.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



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

Добавлено через 2 минуты и 34 секунды
Killer_13, после return, кстати, код не выполняется. поэтому, на твоем бы месте, я убрал return перед printf, так как результат этой функции для тебя значения не имеет.
PM   Вверх
Killer_13
Дата 1.5.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



почитал.
Описал прототип

Код

void exit();


мой код

Код

double f1 (double x)
{
double y;

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


сама ф-ция

Код

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


Опять ошыбка, и пишет с типами данных, потому, что там пустое значение, а там доубле?
PM MAIL   Вверх
math64
Дата 1.5.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



если прогоммируешь 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");
  }
}


PM   Вверх
bsa
Дата 1.5.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Killer_13, не знаю, что ты читал: http://www.cl.cam.ac.uk/cgi-bin/manpage?3+exit
PM   Вверх
Killer_13
Дата 1.5.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



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

Добавлено через 4 минуты
:(:(:( Эххх, еще бы инглиш понимал. :(
PM MAIL   Вверх
math64
Дата 1.5.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Если нужно просто напечатать сообщение и выйти 
Код

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

double fl(double x) {
  if (x == 0) {
    printf("zero division\n");
    exit(1);
  }
  return 1/x;
}
 
PM   Вверх
Killer_13
Дата 1.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



math64 спасибо - эт именно то, на что я и надеялся получить подсказку или ответ.
bsa спасибо за правильные поучения. smile
Вопрос решен. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.