WROX系列 由康博同志翻译的《C#入门经典》 第52页using System;class test
{
static void Main()
{
string 比较;
Console.WriteLine("请输入一个数字:");
double a=Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请再输入一个数字:");
double b=Convert.ToDouble(Console.ReadLine()); if(a<b)
       比较="小于";
if(a==b)
       比较="等于";
if(a>b)
                比较="大于";
        
Console.WriteLine("第一个数字{0} {1} 第二个数字{2}.",a,比较,b);
}}调试的错误提示为:使用了未赋值的局部变量“比较”把if部分换为: if(a<b)
    比较="小于";
 else
  {
     if(a=b)
        比较="等于";
     else
        比较="大于";
    }
   Console.WriteLine("第一个数字{0} {1} 第二个数字{2}.",a,比较,b);就可以了。请问是印刷错误吗?

解决方案 »

  1.   

    是不是编译器这样认为的:
    如果: if(a<b)
           比较="小于";
    if(a==b)
           比较="等于";
    if(a>b)
                    比较="大于";
            都不满足呢?比较就没赋值了吧另外;
         if(a=b)
    就可以了吗?请问是印刷错误吗?
    呵呵
      

  2.   

    if(a<b)
           比较="小于";
    if(a==b)
           比较="等于";
    if(a>b)
                    比较="大于";
    =================================================这样写,编译器是识别不出来a,b的关系到底是什么,不知道上面的比较是否含盖了所有的可能,它认为也许还有别的可能使得 “比较” 这个变量无法符值。
    写成下面的应该就没问题了if(a<b)
           比较="小于";
    else if(a==b)
           比较="等于";
    else
                    比较="大于";
      

  3.   

    string 比较="";
    或者是
    string 比较=string.Empty;
      

  4.   

    局部变量必须赋初值所以开始就写string 比较="";是最好的编译器并不知道,你实际上覆盖了所有分支的情况,即你所写的三个if如果都不发生的话(编译器看不出这三个if的逻辑关系),字符串变量 比较 就没有值了,自然就有可能输出出错,所以编译器及时地纠正了这个问题后面更改过的代码使用的是if...else结构,换而言之,必须要发生其中的一段,这样便一起就不认为字符串变量 比较 没有值,所以是对的
      

  5.   

    错误提示这么明显,你加一点string 比较;
    比较=string.Empty;
    ...
    就可以了.