как вернуть результат из функции (1 либо 0)

Barbie29

Нижеприведенная прога - заполняет хеш. Заполняет исправно.

#include <stdio.h>
#include <search.h>
int cc(ENTRY e ,ENTRY *ep ,char *k, int num,int n){
int i;
int bool;
// for (i = 0; i < num; i++) {
e.key = k;//data[i];
ep = hsearch(e, FIND);
if (ep){bool=1;}
if (!ep){bool=0;}
printf("%9.9s -> %9.9s:%d\n", e.key,
ep ? ep->key : "NULL",
ep ? (intep->data) : 0);
// }
e.key=k;
e.data = (char *)n;
ep = hsearch(e, ENTER);
if (ep == NULL) {
fprintf(stderr, "entry failed\n");
exit(1);
}
return bool;
}
int main {
ENTRY e, *ep;
int ii=5; int n=1;
hcreate(ii);
int cc;
cc=cc(e,ep,"1 1",ii,n);
cc=cc(e,ep,"2 2",ii,n);
cc=cc(e,ep,"1 1",ii,n);
cc=cc(e,ep,"2 2",ii,n);
return 0;
}

Но мне надо, чтобы в случае находки необходимого ключа функция возвращала либо 1 либо 0.
Т.е. можно ли в С вызвать функцию так, чтобы она находилась в условии. т.е. что-то типа этого

if( cc(e,ep,"2 2",ii,n{
printf ("return true, element 2 2 najden, ostanovka\n");
exit (1);
}
if( !cc(e,ep,"2 2",ii,n{
printf ("return false, element 2 2 ne najden, prodolgaem poisk\n");
}

как это сделать попростому?
Спасибо за ответ!
p.s. это С под юникс.
p.s.s. С очень слабо знаю.

maggi14

зачем тебе ехит? делай ретурн

Barbie29

так не работает потому что заполнение хэша идет после return:

#include <stdio.h>
#include <search.h>
int cc(ENTRY e ,ENTRY *ep ,char *k, int num,int n){
int i;
int bool;
// for (i = 0; i < num; i++) {
e.key = k;//data[i];
ep = hsearch(e, FIND);
if (ep){bool=1;}
if (!ep){bool=0;}
printf("%9.9s -> %9.9s:%d\n", e.key,
ep ? ep->key : "NULL",
ep ? (intep->data) : 0);
// }
if(ep){return 0;}
if(!ep){return 1;}
e.key=k;
e.data = (char *)n;
ep = hsearch(e, ENTER);
if (ep == NULL) {
fprintf(stderr, "entry failed\n");
exit(1);
}
// return bool;
}
int main {
ENTRY e, *ep;
int ii=5; int n=1;
hcreate(ii);
if(cc(e,ep,"1 1",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"2 2",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"1 1",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"2 2",ii,n{printf("true\n");} else {printf("false\n");}
return 0;
}
** Joe's Own Editor v3.0 ** Copyright (C) 2003 **
File test.c not changed so no update needed.
[observ contur]$ gcc test.c; ./a.out
1 1 -> NULL:0
true
2 2 -> NULL:0
true
1 1 -> NULL:0
true
2 2 -> NULL:0
true
[observ contur]$

Как это сделать можна?

Bird_V

Лучше всего так:

if( cc(e,ep,"2 2",ii,n
{
printf ("return true, element 2 2 najden, ostanovka\n");
exit (1);
}
ELSE
{
printf ("return false, element 2 2 ne najden, prodolgaem poisk\n");
}

maggi14

ну дак сделай ретурн после заполнения хэша, в чем проблема-то?

Barbie29

так тоже не пашет, мож моэно это средствами C обойти?

#include <stdio.h>
#include <search.h>
int cc(ENTRY e ,ENTRY *ep ,char *k, int num,int n){
int i;
int bool;
// for (i = 0; i < num; i++) {
e.key = k;//data[i];
ep = hsearch(e, FIND);
if (ep){bool=1;}
if (!ep){bool=0;}
printf("%9.9s -> %9.9s:%d\n", e.key,
ep ? ep->key : "NULL",
ep ? (intep->data) : 0);
// }
// if(ep){return 0;}
// if(!ep){return 1;}
e.key=k;
e.data = (char *)n;
ep = hsearch(e, ENTER);
if (ep == NULL) {
fprintf(stderr, "entry failed\n");
exit(1);
}
if(ep){return 1;}
if(!ep){return 0;}
// return bool;
}
int main {
ENTRY e, *ep;
int ii=5; int n=1;
hcreate(ii);
if(cc(e,ep,"1 1",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"2 2",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"1 1",ii,n{printf("true\n");} else {printf("false\n");}
if(cc(e,ep,"2 2",ii,n{printf("true\n");} else {printf("false\n");}
return 0;
}
File test.c saved
File test.c not changed so no update needed.
[observ contur]$ gcc test.c; ./a.out
1 1 -> NULL:0
true
2 2 -> NULL:0
true
1 1 -> 1 1:1
true
2 2 -> 2 2:1
true
[observ contur]$

по задумке вместо первых двух true должно быть false, потому што хеш еще не был заполнен необходимыми ключами. Ладно, пойду щас до дому. поэтому завтра зачитаю ответы. Спасиб заранее.
Дима

Barbie29

потому что после заполнения идет ввод даных (key,value) в хеш: ep = hsearch(e, ENTER);
и в результате этого поиска результат ep будет уже результатом удачного или неудачного ввода данных, и предыдущий идет нах. Ой, я кажись либо придумал решение либо нихрена ваще не понимаю че делать...
Ладно. спасиб. кто отвечал. помогли походу тупому
p.s. эта штука так специально написана, чтобы ызываться из рекурсии.
Оставить комментарий
Имя или ник:
Комментарий: