我定义了两个函数search
和sort
,它们在另一个程序中使用。当我尝试运行程序时,出现错误Unexpected Input
。错误是什么意思?我不知道我的代码有什么问题。
#include "helpers.h"
/**
* Returns true if value is in array of n values, else false.
*/
bool search(int value, int values[], int n)
{
values[n] = n;
for(int i=0; i < n; i++)
{
if(values[n] == value && value > 0)
return 0;
else
return 1;
}
return 0;
}
/**
* Sorts array of n values.
*/
void sort(int values[], int n)
{
int min, swap;
for(int i=1; i < (n-1); i++)
{
min = i;
for(int j=i+1; j< n; j++)
{
if(values[j] < values[min])
min = j;
}
if(min != i)
{
swap = values[i];
values[i] = values[min];
values[min] = swap;
}
}
return;
}
这是我将调用上述两个函数的主程序
#include <stdio.h>
#include <stdlib.h>
#include "helpers.h"
// maximum amount of hay
const int MAX = 65536;
int main(int argc, string argv[])
{
// ensure proper usage
if (argc != 2)
{
printf("Usage: ./find needle\n");
return -1;
}
// remember needle
int needle = atoi(argv[1]);
// fill haystack
int size;
int haystack[MAX];
for (size = 0; size < MAX; size++)
{
// wait for hay until EOF
printf("\nhaystack[%d] = ", size);
int straw = GetInt();
if (straw == INT_MAX)
{
break;
}
// add hay to stack
haystack[size] = straw;
}
printf("\n");
// sort the haystack
sort(haystack, size);
// try to find needle in haystack
if (search(needle, haystack, size))
{
printf("\nFound needle in haystack!\n\n");
return 0;
}
else
{
printf("\nDidn't find needle in haystack.\n\n");
return 1;
}
}
答案 0 :(得分:0)
如果这不会导致错误,那肯定会产生错误。在搜索功能中,尽管最大索引为n
,但您有一个大小为n
且访问索引为n-1
的数组。
此外,您的搜索循环将始终立即退出而不实际检查任何内容。我强烈建议您单步执行代码的每一行,并将值替换为变量以查看发生的情况。
答案 1 :(得分:0)
你能解释一下search()
的参数究竟是什么
bool search(int value,int values[],int n)//what is value,what's n.I mean what are they
根据你的循环代码是
for(int i=0; i < n; i++)
{
if(values[n] == value && value > 0)
return 0;//returns 0 if -- if condition is true
else
return 1;//returns 1 if -- if condition is false
}
Anyway if -- if condition is true or false return value is sent to calling function. so for loop ends in only one comparison so why do you use for loop???
答案 2 :(得分:-1)
将您的代码更改为此
bool search(int value, int values[], int n)
{
bool flag=false;
values[n] = n;
for(int i=0; i < n; i++)
{
if(values[n] == value && value > 0)
flag=true;
}
return flag;
}
用于排序
for(int i=0; i < n; i++)
{
for(int j=i+1; j< n; j++)
{
if(values[j] < values[i])
swap = values[i];
values[i] = values[j];
values[j] = swap;
}
}
return;
}