return 并且在运行时

return and while in function

此函数接受输入并告诉用户输入是数字还是非数字。

static string isnum()
{
        Console.WriteLine("Write a number please");
        string a = Console.ReadLine();
        string nums = "123456789";
        int cnt = 0;
        for (int i = 0; i < a.Length; i++)
        {
            for (int j = 0; j < nums.Length; j++)
            {
                if (a[i] == nums[j])
                {
                    cnt++;
                    break;
                }
            }
        }
        if (cnt == a.Length)
        {
            Console.WriteLine(a + "  is a number");
            return a;
        }
        else
        {
            Console.WriteLine(a + "  is not a number");
            return "";
        } 
}


isnum();

如果输入不是数字,我希望这个函数自己重复,直到输入为数字,然后停止。 此功能现在可用,但她只用了一次。 当我尝试向函数添加一个 while 块以使她一次又一次地 运行 直到输入为数字时,我收到“并非所有代码路径 return 一个值”错误。

是不是因为一个“return”语句结束了一个函数,从而阻止她再次运行? 我该如何解决?

非常感谢!

在这种情况下,最好的方法是使用 do while,因为您希望代码至少 运行 一次。

你的代码有一个问题,当变量不是数字时返回。查看这些修改:

static string isnum()
{
    do{
        Console.WriteLine("Write a number please");
        string a = Console.ReadLine();
        string nums = "123456789";
        int cnt = 0;
        for (int i = 0; i < a.Length; i++)
        {
            for (int j = 0; j < nums.Length; j++)
            {
                if (a[i] == nums[j])
                {
                    cnt++;
                    break;
                }
            }
        }
        if (cnt == a.Length)
        {
            Console.WriteLine(a + "  is a number");
            return a;
        }
        else
        {
            Console.WriteLine(a + "  is not a number");
        } 
    }while(true);
}

你可以通过围绕它创建一个循环来解决这个问题,当它不是数字时不要return。

static string isnum()
{
    // just loop forever.
    while (true)
    {
        Console.WriteLine("Write a number please");
        string a = Console.ReadLine();
        string nums = "123456789";
        int cnt = 0;
        for (int i = 0; i < a.Length; i++)
        {
            for (int j = 0; j < nums.Length; j++)
            {
                if (a[i] == nums[j])
                {
                    cnt++;
                    break;
                }
            }
        }
        if (cnt == a.Length)
        {
            Console.WriteLine(a + "  is a number");
            return a;
        }
        else
        {
            Console.WriteLine(a + "  is not a number");
            // don't return here
        }
    }
}

在while循环中调用,循环直到结果为数字:

string result = "";
while (result == "")
{
    result = isnum();
}
Console.WriteLine("result is a number: " + result);