C#char / string解析问题

时间:2015-08-04 00:28:20

标签: c# string

我是初学程序员,正在尝试创建一个基本的计算器程序。计算器包括while循环和TryParsing,因为如果用户决定键入错误的输入,我希望程序向控制台写入一条简单的错误消息。

一切正常,除非我正在尝试为操作员创建变量。

目前我将它作为char变量命名为:char arithmeticOperator;

对于用户的操作员输入部分,我的代码是:

while (decision == false)
{
    Console.Write("Choose an Operator (+ - * /) : ");
    decision = char.TryParse(Console.ReadLine(), out arithmeticOperator);

    if (decision == false)
    {
        Console.WriteLine("Not an Operator, try again...");
    }
}

这适用于number1和number2变量,没有问题。

但是在'if'声明部分中我收到错误...

if (arithmeticOperator == '+')
{
    Console.WriteLine(num1 + num2);
}

arithmeticOperator在“使用未分配的局部变量”下面有一条红色波浪线。

我查了一下,发现char不能为空,所以我给char一些值进行测试;当程序运行时,如果我使用有效的算术运算符,程序就可以正常工作;如果我使用任何其他内容,例如任何其他单个字符,程序将重新启动。

我尝试使用字符串,但你不能尝试使用字符串,我无法找到字符串的解决方案。

我不希望出现异常错误,所以我避免使用Parse作为字符串。我还想通过向控制台写出“无效输入,再试一次”来让用户知道他们是否插入了错误的输入。

我有2个问题......

  1. 如何专门应用Char只能使用算术运算符(+, - ,*,/)。如果键入任何其他单个字符数字或文本字母,则应显示控制台文本错误 这可能吗?

  2. 如果我有一个名为的字符串:string choice =“YES”;
    如何使用字符串,以便在用户键入“YES”以外的内容时,向控制台显示错误而不会出现异常错误?

  3. 我不需要同时使用char和string,但知道将来参考会很好。我希望这有任何意义,抱歉这么多信息。

3 个答案:

答案 0 :(得分:1)

没有看到更多的代码,听起来你不小心把代码放在代码块外面检查'+',其中'arithmeticOperator'被定义了。在声明arithmeticOperator的代码块中移动该代码,或者将声明移出以具有更宽的范围。

答案 1 :(得分:0)

这是一个可能适合您的解决方案:

static void Main(string[] args)
{
    char arithmeticOperator;
    bool decision = false;
    while (decision == false)
    {
        Console.Write("Choose an Operator (+ - * /) : ");
        char.TryParse(Console.ReadLine(), out arithmeticOperator);


        switch (arithmeticOperator)
        {
            case '+':
            case '-':
            case '*':
            case '/':
                decision = true;
                break;
            case '\0':
                Console.WriteLine("Error!!! Value is a string.");
                decision = false;
                break;
            default:
                decision = false;
                break;
        }

        if (decision == false)
        {
            Console.WriteLine("Not an Operator, try again...");
        }
    }
}

一些注意事项:

  • arithmeticOperator声明为仅限字符
  • 使用switch检查运营商案例(+ - * /)
  • decision变量不依赖char.TryParse()的结果而非switch-case条件流

对于红色波浪警告,在使用变量arithmeticOperator之前没有为其分配任何值。在上面的示例代码中,声明为空(字符为'\ 0'),但您会看到始终评估bool decision = false;循环的while,因此arithmeticOperator将永远有一个值,所以它不会有任何警告使用未分配的局部变量)。

1)第一个问题是检查输入的字符是否为字符串。是的,可以通过\0字符进行检查。您可以添加以下案例:

case '\0':
    Console.WriteLine("Error!!! Value is a string.");
    decision = false;
    break;

2)对于你的第二个问题,我不确定我是否清楚地知道它,但这是一个代码片段,接受string并得到答案YES,否则输出错误:

string choice = "YES";
string answer = null;
while (true)
{
    answer = Console.ReadLine();
    if (answer.Trim().ToUpper().Equals(choice))
    {
        break;
    }
    else
    {
        Console.WriteLine("Error, say YES");
    }
}

答案 2 :(得分:-1)

声明变量时,需要首先初始化每个变量:

char arithmeticOperator = '\0'; // this is the default value for char
bool decision = false;

这使得每个变量某些,然后可以在以后使用。如果您初始化它们(如此):

char arithmeticOperator;

然后无法为它们分配任何新值,因为它们没有可分配的值。

有一些方法可以解决这个问题,正如其他一些答案所提供的那样,但这是一个很好的做法 - 总是为变量赋值,即使它只是 null