void search(struct _data *BlackBox, char *name, int size)
- эта функция получит динамический массив структуры, переданной ему, имя, которое мы ищем , и размер массива. Затем эта функция будет искать динамический массив для имени.поиск структуры в C
typedef struct _data
{
char* name;
long number;
} _data;
int scan(FILE *(*stream));
struct _data *load(FILE *stream, int size);
void search(struct _data *Blackbox, char *name, int size);
int main()
{
int size = scan(&stream);
rewind(stream);
_data *data = load(stream, size);
char input;
printf("Please Input Search Name: ");
scanf("%s", input);
while (input != NULL)
{
search(data, input, size);
}
}
void search(struct _data *Blackbox, char *name, int size)
{
for (int i=0; i<size; i++)
{
if (strcmp(name,Blackbox[i].name) != 0)
{
printf("Success");
}
else
{
printf("Name Not Found");
}
}
}
Но я получаю следующий результат
Output:
LINES: 2
ron 7774013
jon 7774014
Please Input Search Name: ron
RUN FINISHED; Segmentation fault: 11; real time: 2s; user: 0ms; system: 0ms
Обратите внимание, что для большинства целей вам следует учитывать имена, начинающиеся с символа подчеркивания, зарезервированные для используемой реализации. Вы уйдете с ним на удивление часто, но не навсегда. И это повредит, когда вам это не удастся. –
@ user3337714 Самое простое решение - запустить в отладчике и посмотреть, где именно он разбился. Но в любом случае я не думаю, что он даже компилируется - ваш 'input' имеет тип' char', но 'search' ожидает' char * ', а' scanf' - 'char' (с форматом'% s') почти конечно, неверно. Вы должны скомпилировать код с включенными предупреждениями (по крайней мере, '-Wall' для gcc/clang). – keltar
@JonathanLeffler: Идентификаторы, начинающиеся с символа * double * или подчеркивания, за которым следует заглавная буква, зарезервированы для реализации. Единственное подчеркивание и строчная буква в порядке. –