как вернуть результат из функции (1 либо 0)
зачем тебе ехит? делай ретурн
так не работает потому что заполнение хэша идет после 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]$
Как это сделать можна?
Лучше всего так:
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");
}
ну дак сделай ретурн после заполнения хэша, в чем проблема-то? 

так тоже не пашет, мож моэно это средствами C обойти?
по задумке вместо первых двух true должно быть false, потому што хеш еще не был заполнен необходимыми ключами. Ладно, пойду щас до дому. поэтому завтра зачитаю ответы. Спасиб заранее.
Дима
#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, потому што хеш еще не был заполнен необходимыми ключами. Ладно, пойду щас до дому. поэтому завтра зачитаю ответы. Спасиб заранее.
Дима
потому что после заполнения идет ввод даных (key,value) в хеш: ep = hsearch(e, ENTER);
и в результате этого поиска результат ep будет уже результатом удачного или неудачного ввода данных, и предыдущий идет нах. Ой, я кажись либо придумал решение либо нихрена ваще не понимаю че делать...
Ладно. спасиб. кто отвечал. помогли походу тупому
p.s. эта штука так специально написана, чтобы ызываться из рекурсии.
и в результате этого поиска результат ep будет уже результатом удачного или неудачного ввода данных, и предыдущий идет нах. Ой, я кажись либо придумал решение либо нихрена ваще не понимаю че делать...
Ладно. спасиб. кто отвечал. помогли походу тупому

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