注册 登录
编程论坛 C# 论坛

【求助】究竟哪里错了?不明白

lxsxd 发布于 2014-05-18 11:01, 506 次点击
一、题目
编一个程序,定义三个float类型变量x,y和z,输入三个实数,不用数组,要求对这三个变量按照升序排序,然后输出结果。
二、代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace my
{
    class Program
    {
        static void Main()
        {

            float x, y, z;
            float max, min;
            int i = 1;
            do
            {
                swtich(i);
                {
                    case 1:
                    Console.WriteLine("请输入X:");
                    x=Console.ReadLine();
                    i++;
                    break;
                    case 2:
                    Console.WriteLine("请输入Y:");
                    y=Console.ReadLine();
                    i++;
                    break;
                    case 3:
                    Console.WriteLine("请输入Z:");
                    z=Console.ReadLine();
                    i++;
                    break;

                }

            }
            while(i<=3);

            max=Math.Max(Math.Max(x,y),z);
            min=Math.Min(Math.Min(x,y),z);

            Console.WriteLine("输入的X,Y,Z是:{0}\t{1}\t{2}",x,y,z);
            Console.WriteLine("按升序排序是:{0}\t{1}\t{2}",min,x+y+z-max-min,max);
            
            Console.ReadLine();
        }
              
    }
}

三、错误提示

错误    1    无效的表达式项“case”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    20    21    my
错误    2    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    20    27    my
错误    3    无效的表达式项“:”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    20    27    my
错误    4    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    20    28    my
错误    5    无效的表达式项“case”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    25    21    my
错误    6    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    25    27    my
错误    7    无效的表达式项“:”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    25    27    my
错误    8    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    25    28    my
错误    9    无效的表达式项“case”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    30    21    my
错误    10    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    30    27    my
错误    11    无效的表达式项“:”    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    30    27    my
错误    12    应输入 ;    D:\用户目录\Documents\Visual Studio 2008\Projects\my\my\Program.cs    30    28    my

四、困惑
1、应输入处。按照书本上,明明是用冒号(:)的,可提示却要用分号(;)
2、无效表达项case  .我实在不明白,swtich语句的用法就是这样的,怎么case这项就错误了呢??
5 回复
#2
yhlvht2014-05-18 14:42
swtich(i);写错了,应为switch,另外switch(i)后面不要有分号
#3
lxsxd2014-05-18 18:45
感谢信
------
    感谢yhlvht的指点,的确switch关键字错了,另外多了一个分号。

    追问:我把代码改成如下,出现新的错误,我有不明白的地方。

一、代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace my
{
    class Program
    {
        static void Main()
        {

            float x, y, z;
            float max, min;
            int i = 1;
            do
            {
                switch(i)
                {
                    case 1:
                    Console.WriteLine("请输入X:");
                    x=float.Parse(Console.ReadLine());
                    i++;
                    break;
                    case 2:
                    Console.WriteLine("请输入Y:");
                    y = float.Parse(Console.ReadLine());
                    i++;
                    break;
                    case 3:
                    Console.WriteLine("请输入Z:");
                    z = float.Parse(Console.ReadLine());
                    i++;
                    break;

                }

            }
            while(i<=3);

            max=Math.Max(Math.Max(x,y),z);
            min=Math.Min(Math.Min(x,y),z);

            Console.WriteLine("输入的X,Y,Z是:{0}\t{1}\t{2}",x,y,z);
            Console.WriteLine("按升序排序是: {0}\t{1}\t{2}",min,x+y+z-max-min,max);
            
            Console.ReadLine();
        }
              
    }
}
二、错误提示
   提示:语句max=Math.Max(Math.Max(x,y),z);使用了没有赋值的X\Y\Z。
三、困惑

     定义float x,y,z;
     本来这三个值就是要等键盘输入的,为什么要先赋值呢??
#4
lxsxd2014-05-18 18:46
回复 2 楼 yhlvht
感谢信
------
    感谢yhlvht的指点,的确switch关键字错了,另外多了一个分号。

    追问:我把代码改成如下,出现新的错误,我有不明白的地方。

一、代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace my
{
    class Program
    {
        static void Main()
        {

            float x, y, z;
            float max, min;
            int i = 1;
            do
            {
                switch(i)
                {
                    case 1:
                    Console.WriteLine("请输入X:");
                    x=float.Parse(Console.ReadLine());
                    i++;
                    break;
                    case 2:
                    Console.WriteLine("请输入Y:");
                    y = float.Parse(Console.ReadLine());
                    i++;
                    break;
                    case 3:
                    Console.WriteLine("请输入Z:");
                    z = float.Parse(Console.ReadLine());
                    i++;
                    break;

                }

            }
            while(i<=3);

            max=Math.Max(Math.Max(x,y),z);
            min=Math.Min(Math.Min(x,y),z);

            Console.WriteLine("输入的X,Y,Z是:{0}\t{1}\t{2}",x,y,z);
            Console.WriteLine("按升序排序是: {0}\t{1}\t{2}",min,x+y+z-max-min,max);
            
            Console.ReadLine();
        }
              
    }
}
二、错误提示
   提示:语句max=Math.Max(Math.Max(x,y),z);使用了没有赋值的X\Y\Z。
三、困惑

     定义float x,y,z;
     本来这三个值就是要等键盘输入的,为什么要先赋值呢??
#5
yhlvht2014-05-18 21:33
因为电脑比较笨呀,它不知道i是等于1的,所以一定会执行case 1
它只是在想,如果switch语句没有进去的话,如果直接跳过了do while循环的话,那么x,y,z是没有赋值的,是不能用于计算max的
所以给x,y,z赋一个初始值就好了
编译器不会检查变量i赋的值是多少,如果你给i赋一个大于3的值,就可能真的出问题袄
#6
lxsxd2014-05-19 07:51
感谢信
---------
    谢谢您的解答。
1