Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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语言中的错误消息#_C#_If Statement_Unreachable Code - Fatal编程技术网

C# &引用;“检测到无法访问的代码”;C语言中的错误消息#

C# &引用;“检测到无法访问的代码”;C语言中的错误消息#,c#,if-statement,unreachable-code,C#,If Statement,Unreachable Code,我正试图用C语言编写一个程序,以确定一个数字是否是素数。我使用前两个if语句挑出许多选项,然后尝试在最后一个else语句中嵌套一个循环,它告诉我检测到“无法访问的代码” public static bool primeNumber () { Console.Write ("Please enter a number to see if it is a prime number: "); int num = int.Parse (Console.ReadLi

我正试图用C语言编写一个程序,以确定一个数字是否是素数。我使用前两个if语句挑出许多选项,然后尝试在最后一个else语句中嵌套一个循环,它告诉我检测到“无法访问的代码”

public static bool primeNumber ()
    {
        Console.Write ("Please enter a number to see if it is a prime number: ");
        int num = int.Parse (Console.ReadLine ());
        if (num % 2 == 0)
            return false;
        else if (num % 5 == 0)
            return false;
        else {
            for (int i = 3; i < num / 2; i += 2)
            {
                if (num % i == 0)
                    return false;
                else 
                    return true;
            }
        }
    }
公共静态布尔素数()
{
Console.Write(“请输入一个数字,看看它是否是质数:”);
intnum=int.Parse(Console.ReadLine());
如果(数值%2==0)
返回false;
else if(num%5==0)
返回false;
否则{
对于(int i=3;i
这里有两个问题:

  • 不可达代码
  • 方法并不是在所有情况下都返回值
返回值问题是一个错误,它会阻止编译完成,而无法访问的代码只是一个警告。“just”的意思是它不一定会停止编译,但您应该将其视为bug的迹象

让我在这里写一个新的例子来说明实际问题:

public static bool primeNumber (int num)
{
    for (int i = 0; i < num; i++)
    {
        if (i < 10)
            return false;
        else 
            return true;
    }
}
  • 如果我们遇到一个证明测试的数字(即,它不是质数),那么只在循环中返回,我们将消除无法访问的代码问题
  • 然后,如果我们设法运行循环直到完成,我们无法证明它不是质数,因此它是质数,然后我们返回
    true

意见:您不应该有一个提示用户然后返回答案的函数。相反,我将编写以下()程序:

void Main()
{
Console.Write(“请输入一个数字,看看它是否是质数:”);
intnum=int.Parse(Console.ReadLine());
if(素数(num))
WriteLine(num+“是一个素数”);
其他的
WriteLine(num+“不是质数”);
}
公共静态布尔素数(int num)
{
如果(数值%2==0)
返回false;
else if(num%5==0)
返回false;
否则{
对于(int i=3;i
您的
for
循环在这里什么都不做,因为它在第一次运行时返回,所以

i += 2
永远也达不到


您的整个
for
循环相当于一个
返回true

您尝试过调试吗?这里无法访问的代码是什么?编译器指出了一些代码,你能这样做吗?或者你的意思是“并非所有代码路径都返回一个值”,这才是真正的错误?@Harry无法对无法编译的代码运行调试器。@hvd如果问题真的是“检测到无法访问的代码”,那么它将是一个警告,而不是一个错误。我怀疑Lasse是对的,OP可能意味着“并非所有代码路径都返回值”,这是一个编译器错误。
public static bool primeNumber ()
{
    Console.Write ("Please enter a number to see if it is a prime number: ");
    int num = int.Parse (Console.ReadLine ());
    if (num % 2 == 0)
        return false;
    else if (num % 5 == 0)
        return false;
    else {
        for (int i = 3; i < num / 2; i += 2)
        {
            if (num % i == 0)
                return false;
        }
        return true;
    }
}
void Main()
{
    Console.Write ("Please enter a number to see if it is a prime number: ");
    int num = int.Parse (Console.ReadLine ());
    if (primeNumber(num))
        Console.WriteLine(num + " is a prime number");
    else
        Console.WriteLine(num + " is a not prime number");
}

public static bool primeNumber (int num)
{
    if (num % 2 == 0)
        return false;
    else if (num % 5 == 0)
        return false;
    else {
        for (int i = 3; i < num / 2; i += 2)
        {
            if (num % i == 0)
                return false;
        }
        return true;
    }
}
i += 2