Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么是;并非所有控制路径都返回值”;在这个节目里是什么意思?_C_Function_If Statement_Binary Search_Cs50 - Fatal编程技术网

C 什么是;并非所有控制路径都返回值”;在这个节目里是什么意思?

C 什么是;并非所有控制路径都返回值”;在这个节目里是什么意思?,c,function,if-statement,binary-search,cs50,C,Function,If Statement,Binary Search,Cs50,我编写了一个代码,在输入EOF整数(本例中为999999)之前一直接受输入。然后它对数字进行排序,并在整数数组(称为haystack)中搜索指针(一个整数)。现在我的搜索算法面临一个问题。编译时,它会向我显示一条警告: “搜索”:并非所有控件路径都返回值 我认为这意味着函数在某些情况下可能不会返回任何内容,但问题是我想不出任何这样的情况。我甚至用很多值检查了我的程序,它总是给我正确的输出。谁能帮我找出问题所在吗。为此,我使用了一些windows本机工具编译器 另外,如果有人看到与此相关的CS50

我编写了一个代码,在输入EOF整数(本例中为999999)之前一直接受输入。然后它对数字进行排序,并在整数数组(称为haystack)中搜索指针(一个整数)。现在我的搜索算法面临一个问题。编译时,它会向我显示一条警告:

“搜索”:并非所有控件路径都返回值

我认为这意味着函数在某些情况下可能不会返回任何内容,但问题是我想不出任何这样的情况。我甚至用很多值检查了我的程序,它总是给我正确的输出。谁能帮我找出问题所在吗。为此,我使用了一些windows本机工具编译器

另外,如果有人看到与此相关的CS50 pset3查找问题,我也使用了相同的搜索功能,但在CS50 IDE中编译代码时,程序从未显示它是否在大海捞针。它只是按递增的顺序排列,然后停止

#include <stdio.h>
#include "cs50.h"
#include <stdlib.h>


bool search(int value, int values[], int n);
void sort(int values[], int n);

// maximum amount of hay
#define 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[%i] = ", size);
        int straw = GetInt();
        if (straw == 999999)
        {
            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;
    }
}

/**
 * Returns true if value is in array of n values, else false.
 */
bool search(int value, int values[], int n)
{
    /* TODO: implement a searching algorithm */
    int first = 0;
    int last = n;
    int middle = (first + last) / 2;

    while (first + 1 < last)
    {
        if (value == values[middle])
        {
            return true;
            break;
        }
        if (value == values[first])
        {
            return true;
            break;
        }
        if (value == values[last])
        {
            return true;
            break;
        }        
        if (value < values[middle])
        {
            last = middle;
            middle = (first + last) / 2;
        }
        if (value > values[middle])
        {
            first = middle;
            middle = (first + last) / 2;
        }
    }
    if (first + 1 >= last)
    {
        return false;
    }
}

/**
 * Sorts array of n values.
 */
void sort(int values[], int n)
{
    // TODO: implement an O(n^2) sorting algorithm
    for (int j = 1; j < n; j++)
    {
        for (int i = 0; i < (n - 1); i++)
        {
            if( values[i + 1] < values[i])
            {
                int b = values[i + 1];
                values[i + 1] = values[i];
                values[i] = b;
            }
        }
    }
    for (int k = 0; k < n; k++)
    {
        printf("haystack[%d] = %d ", k, values[k]);
    }
}
#包括
#包括“cs50.h”
#包括
布尔搜索(int值,int值[],int n);
无效排序(int值[],int n);
//最大干草量
#定义最大值65536
int main(int argc,字符串argv[])
{
//确保正确使用
如果(argc!=2)
{
printf(“用法:./find needle\n”);
返回-1;
}
//记得针吗
int针=atoi(argv[1]);
//填海
整数大小;
国际干草堆[最大值];
用于(大小=0;大小<最大值;大小++)
{
//等待干草,直到EOF
printf(“\n堆栈[%i]=”,大小);
int=GetInt();
如果(吸管==999999)
{
打破
}
//把干草放进堆里
干草堆[大小]=稻草;
}
printf(“\n”);
//分类干草堆
分类(草堆、大小);
//大海捞针
if(搜索(针、干草堆、大小))
{
printf(“\n大海捞针!\n\n”);
返回0;
}
其他的
{
printf(“\n大海捞针找不到。\n\n”);
返回1;
}
}
/**
*如果值在n个值的数组中,则返回true,否则返回false。
*/
布尔搜索(int值,int值[],int n)
{
/*TODO:实现一个搜索算法*/
int first=0;
int last=n;
中间整数=(第一个+最后一个)/2;
while(第一个+1<最后一个)
{
如果(值==值[中间])
{
返回true;
打破
}
如果(值==值[第一个])
{
返回true;
打破
}
如果(值==值[最后])
{
返回true;
打破
}        
如果(值<值[中间])
{
最后=中间;
中间=(第一个+最后一个)/2;
}
如果(值>值[中间])
{
第一个=中间;
中间=(第一个+最后一个)/2;
}
}
如果(第一个+1>=最后一个)
{
返回false;
}
}
/**
*对n个值的数组进行排序。
*/
无效排序(int值[],int n)
{
//TODO:实现一个O(n^2)排序算法
对于(int j=1;j
编译器不会执行您的代码。它不进行值跟踪。虽然您可以对变量和表达式的值进行推理,但这通常是编译器无法解决的问题

您的编译器告诉您,当控件到达函数的关闭位置时,它不知道从
search
返回什么


顺便说一句,写一个名为
sort
的函数是个坏主意,因为C标准库包含一个同名的函数。

这意味着你有一个函数承诺返回一个给定类型的值,例如bool,并且在函数内部有一些路径代码可以采用,而不会返回任何值。
(first+1>=last)
是毫无意义的。这就是您退出上面while循环的方式。只需使用
return false;
BTW
int last=n;
-->
int last=n-1;
请在将来提供一个关于程序逻辑的注释。
if(first+1>=last)
返回
false
但否则不会返回任何值。这就是编译器抱怨的问题。谢谢你的回答。我明白我做错了什么。我必须删除换行代码,还必须删除return false中的if条件,我的代码才会正确。我的算法正确吗?