问一下最后pay为啥显示未赋值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _3
{
class Program
{
static void Main(string[] args)
{
double money;
double pay;
Console.Write("请输入消费金额:");
money = Convert.ToDouble(Console.ReadLine());
if (money < 1000)
pay = money;
else if (1000 < money && money <= 2000)
{
Console.WriteLine("是否有会员?(y/n)");
Convert.ToChar(Console.ReadLine());

            if (Convert.ToChar(Console.ReadLine()) == 'y')
                pay = 0.9 * 0.95 * money;
            else if ((Convert.ToChar(Console.ReadLine()) == 'n'))
                pay = 0.9 * money;
            else
                Console.WriteLine("输入有误,请重新输入");
        }
        else
        {
            Console.WriteLine("是否有会员?(y/n)");
            Convert.ToChar(Console.ReadLine());

            if (Convert.ToChar(Console.ReadLine()) == 'y')
                pay = 0.85 * 0.85 * money;
            else if ((Convert.ToChar(Console.ReadLine()) == 'n'))
                pay = 0.85 * money;
            else
                Console.WriteLine("输入有误,请重新输入");
        }
        Console.WriteLine("消费金额为{0}实际需要支付{1}元", money,pay);
        Console.ReadKey();
    }
}

}

double pay;
改为

double pay=0.0;

给pay赋予初始0,否则编译的时候,系统认为pay可能未被赋值(都走else分支的情况下)

那肯定是输入判断有问题,既不是'y',也不是'n',才会pay没有赋值
Convert.ToChar是把数值型转换为字符。但ReadLine返回的是字符串
string a = Console.ReadLine();
if(a[0] == 'y')试试

因为你的
if()
else if()
else
{
}
中有分支中没有给pay赋值。ru:Console.WriteLine("输入有误,请重新输入");
而且你的代码有问题。
Console.WriteLine("是否有会员?(y/n)");
Convert.ToChar(Console.ReadLine());//1
Console.Read();//2
if (Convert.ToChar(Console.ReadLine()) == 'y') //3
pay = 0.9 * 0.95 * money;
else if ((Convert.ToChar(Console.ReadLine()) == 'n'))

这里你输入一个‘y'后就被第一个readLine获取了。你后面比较的时候会再一次等待输入。


```c

double money;
            double pay = 0;
            char vip;
            Console.Write("请输入消费金额:");
            money = Convert.ToDouble(Console.ReadLine());
            if (money < 1000)
                pay = money;
            else if (1000 < money && money <= 2000)
            {
                Console.WriteLine("是否有会员?(y/n)");
                vip = Convert.ToChar(Console.ReadLine());
                if (vip == 'y')
                    pay = 0.9 * 0.95 * money;
                else if (vip == 'n')
                    pay = 0.9 * money;
                else
                {
                    Console.WriteLine("输入有误,请重新输入");
                    return;
                }
            }
            else
            {
                Console.WriteLine("是否有会员?(y/n)");
                vip = Convert.ToChar(Console.ReadLine());
                if (vip == 'y')
                    pay = 0.85 * 0.85 * money;
                else if (vip == 'n')
                    pay = 0.85 * money;
                else
                {
                    Console.WriteLine("输入有误,请重新输入");
                    return;
                }
            }
            Console.WriteLine("消费金额为{0}实际需要支付{1}元", money, pay);

```

Convert.ToChar()得到的结果是Char类型的,和'y'字符串类型无法比较