2010-05-04 4 views
1

Я обновил свой основной и последовательный поиск, и теперь он сбой при его запуске. Он компилируется нормально, но затем падает.Подсчитайте количество поисков

main.c

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <stdbool.h> 
#include "percentage.h" 
#include "sequentialSearch.h" 

#define searchAmount 100 

int main(int argc, char *argv[]) 
{ 
    int numbers[100]; 
    int searches[searchAmount]; 
    int testAmounts[searchAmount]; 
    int i; 
    int where; 
    int searchSuccess; 
    int searchUnsuccess; 
    int percent; 
    int looker; 
    int sum; 
    int average; 

    srand(time(NULL)); 
    for (i = 0; i < 100; i++){ 
     numbers[i] = rand() % 200; 
    } 
    for (i = 0; i < searchAmount; i++){ 
     searches[i] = rand() % 200; 
    } 

    searchUnsuccess = 0; 
    searchSuccess = 0; 
    sum = 0; 

    for(i = 0; i < searchAmount; i++){ 
     if(seqSearch(numbers, 100, searches[i], &where, &looker)){ 
       searchSuccess++; 
       testAmounts[i] = looker; 

     }else{ 
       searchUnsuccess++; 
       testAmounts[i] = looker; 
     } 
    } 
    for(i = 0; i < searchAmount; i++){ 
     sum = sum + testAmounts[i]; 
    } 

    average = sum/searchAmount; 

    percent = percentRate(searchSuccess, searchAmount); 
    printf("Total number of searches: %d\n", searchAmount); 
    printf("Total successful searches: %d\n", searchSuccess); 
    printf("Success Rate: %d%%\n", percent); 
    printf("Total number of tests ran: %d\n", average); 
    system("PAUSE"); 
    return 0; 
} 

sequentialSearch.h

bool seqSearch (int list[], int last, int target, int* locn, int* looker){ 

    *looker = 0; 
    while(*looker < last && target != list[*looker]){ 
        *looker++; 
    } 

    *locn = *looker; 
    return(target == list[*looker]); 
} 

ответ

2

Pass телезритель в качестве ссылки, так что вы можете получить доступ к его значение от вызывающего абонента.

int looker; 

... 

for(i = 0; i < searchAmount; i++){ 
     if(seqSearch(numbers, 100, searches[i], &where, &looker)){ 
      searches[i] += looker; 
      searchSuccess++;  
     }else{ 
      searchUnsuccess++; 
     } 
} 


bool seqSearch (int list[], int last, int target, int* locn, int *looker){ 
    *looker = 0; 
    while(*looker < last && target != list[*looker]){ 
        (*looker)++; 
    } 

    *locn = *looker; 
    return(target == list[*looker]); 
} 

Кстати, вы можете пересмотреть определение функций в файле заголовка; это может вызвать проблемы с дублирующимся символом при связывании, если у вас есть более одного файла c, включая этот файл.

+0

хорошо, но моя главная проблема заключается в том, как мне помещать это в массив с тем, как я написал основную запись? – shinjuo

+0

ohhh я вижу. Спасибо – shinjuo

+0

Извините, обновил мой ответ для вас. – WhirlWind

1

Почему просто не пройти looker в качестве int*, использовать его по существу, как вы были, посмотрите значение после того, как seqSearch(...) возвращается, и добавить его в общей сложности работает еще в main()?

1

Одна из проблем заключается в том, что приращение looker в seqSearch увеличивает указатель, а не значение. Вероятно, это должно быть:

(*looker)++; 
Смежные вопросы