2010-05-04 85 views
1

我更新了主要和sequetialSearch,现在它在运行时崩溃。它编译好,但然后崩溃。计算搜索次数

的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

通旁观者引用,这样就可以从呼叫者访问其价值。

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 2010-05-04 19:31:53

+0

哦,我明白了。谢谢 – shinjuo 2010-05-04 19:33:16

+0

对不起,更新了我的答案给你。 – WhirlWind 2010-05-04 19:33:51

1

为什么不直接传递looker作为int*,用它基本上与你一直,看值之后seqSearch(...)回报,并把它添加到正在运行的总回main()

1

一个问题是seqSearch中的looker增量正在递增指针而不是值。它可能应该是:

(*looker)++;