空中社区

首页 » 〓〓娱乐地带〓〓 » ┫数码风云┣ » 编程与项目开发 » 大家来讨论一个源代码
Rock - 2008-10-17 15:12:00
这是小丫丫中午的时候发给我的,是他在微软班他C#写的一个程序.

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


namespace Lab1Exp4
{
    class Search
    {
        static void Main(string[] args)
        {
            int Kate = 80, Mary = 90, Tom = 100;
            char Flag = '1';
            char input;


            Console.WriteLine("k----------Kate");
            Console.WriteLine("m----------Mary");
            Console.WriteLine("t----------Tom");
/*            Console.WriteLine("请输入姓名提示:");
            input = (char)Console.Read();
            while (Flag != '0')
            {
                switch (input)
                {
                    case 'k':
                        Console.WriteLine("Kate的成绩为:" + Kate);
                        break;
                    case 'm':
                        Console.WriteLine("Mary的成绩为:" + Mary);
                        break;
                    case 't':
                        Console.WriteLine("Tom的成绩为:" + Tom);
                        break;
                    default:
                        Console.WriteLine("您的输入有误,请重新输入!");
                        break;
                }
                Console.WriteLine("请输入任意键以继续,输入0结束");
                Flag = (char)Console.Read();
                Console.WriteLine("请输入姓名提示:");
                input = (char)Console.Read();
            }*/

            do
            {
                Console.WriteLine("请输入姓名提示:");
                input = (char)Console.Read();


                switch (input)
                {
                    case 'k':
                        Console.WriteLine("Kate的成绩为:" + Kate);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case 'm':
                        Console.WriteLine("Mary的成绩为:" + Mary);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case 't':
                        Console.WriteLine("Tom的成绩为:" + Tom);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case '0':
                    break;
                    default:
                        Console.WriteLine("您的输入有误,请重新输入!");
                        break;
                }
            } while (input != '0');
            
        }
    }
}


但是运行的结果是这样的,

 附件: 您所在的用户组无法下载或查看附件

不知道为什么会多出这些循环,
注释掉的代码和正常的代码两部分都是这个问题,
按理说小丫丫的思路是没有问题的,
我大概怀疑是哪些地方有问题但是不太确定,
所以我重新写了一个,可以实现正常的功能(见下图)
但是小丫丫这个程序是哪里错了,大家来讨论一下吧.

 附件: 您所在的用户组无法下载或查看附件
Rock - 2008-10-17 15:16:00
这个是我写的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int Kate = 80, Mary = 90, Tom = 100;
            string input;

            Console.WriteLine("k----------Kate");
            Console.WriteLine("m----------Mary");
            Console.WriteLine("t----------Tom");

            do
            {
                Console.WriteLine("请输入姓名提示:");
                input = (string)Console.ReadLine();
                if (input == "k")
                    Console.WriteLine("Kate的成绩为:" + Kate);
                else if (input == "m")
                    Console.WriteLine("Mary的成绩为:" + Mary);
                else if (input == "t")
                    Console.WriteLine("Tom的成绩为:" + Tom);
                else
                    Console.WriteLine("您的输入有误,请重新输入!");
                if (input == "k" || input == "m" || input == "t")
                    Console.WriteLine("请输入任意键以继续,输入0结束");
                input = (string)Console.ReadLine();
            } while (input != "0");
        }
    }
}
Rock - 2008-10-17 15:17:00
问题是不是出在console.read这个方法上呢?
无牙子 - 2008-10-17 15:35:00
冗余太多了
Rock - 2008-10-17 15:40:00
咱先不讨论什么冗余不冗余的问题,关键是先来实现他的功能.
小兵 - 2008-10-17 16:19:00
猜测:
switch (input)
                {
                    case 'k':
                        Console.WriteLine("Kate的成绩为:" + Kate);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case 'm':
                        Console.WriteLine("Mary的成绩为:" + Mary);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case 't':
                        Console.WriteLine("Tom的成绩为:" + Tom);
                        Console.WriteLine("请输入任意键以继续,输入0结束");
                        break;
                    case '0':
                    break;
                    default:
                        Console.WriteLine("您的输入有误,请重新输入!");
                        break;
                }
这当中的CASE含有2条语句(如:
Console.WriteLine("Tom的成绩为:" + Tom);
Console.WriteLine("请输入任意键以继续,输入0结束");
)根据switch语法说明,case后应该接一条语句。所以。case后的语句如果非要两条,那么请用括号括起来。

纯属猜测,没有.NET调试过,不知道这是否是原因所在
心~有点累 - 2008-10-17 16:29:00
源代码?是什么呀?》?:~ (很白痴的问题)
星琴 - 2008-10-17 17:20:00
今天中午测试的时候  初始输入一个 k
然后逐步看读入  第一次读入了是 k
然后自动读入了\r
然后又自动读入了\n
接着才是再次请求输入
刚过来上机  肉克的代码还没有试  一会我试试  感觉问题就是出在console.read()上
泪奔木头人 - 2008-10-17 17:40:00
好汗啊  极其专业的 说
Rock - 2008-10-17 17:59:00
因为console.read只能读入一个字符,所以我怀疑就是这块出了问题,
星琴 - 2008-10-17 18:10:00
因为要求是读入一个字符来判断
所以我用了console.read
但是发现读入完一次后 又会自动的调用\r \n  是不是console.read在读入了一个字符后还会读入\r\n ?
星琴 - 2008-10-17 19:23:00
问题解决了  是Read()的问题
输入一个K回车,实际输入的大概是K\r\n
然后Read(); 取出K,现在缓存里面还有两个字符,意思是不为空.不为空下回再执行 Console.ReadLine(); 的时候就不会再等等键盘输入了.直接读,但是这个读取的时候是遇到\r就停止了,读出来的是空,清空缓存,返回"",然后再读,又读入\n,导致了重复几次循环的结果

我把input换成string类型 然后把Read换成ReadLine就OK了
把代码贴上来

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

namespace Lab1Exp4
{
    class Search
    {
        static void Main(string[] args)
        {
            int Kate = 80, Mary = 90, Tom = 100;
            string  input=" ";

            Console.WriteLine("k----------Kate");
            Console.WriteLine("m----------Mary");
            Console.WriteLine("t----------Tom");

            do
            {
                Console.Write("\n请输入姓名提示,输入0结束:");
                input = Console.ReadLine();


                switch (input)
                {
                    case "k":
                        Console.WriteLine("Kate的成绩为:" + Kate);
                        break;
                    case "m":
                        Console.WriteLine("Mary的成绩为:" + Mary);
                        break;
                    case "t":
                        Console.WriteLine("Tom的成绩为:" + Tom);
                        break;
                    case "0":
                        Console.WriteLine("感谢使用");
                        return ;
                    default:
                        Console.WriteLine("您的输入有误,请重新输入!\n");
                        break;
                }
            } while (true);
        }
    }
}


xj040613 - 2008-10-17 20:37:00
就是read的问题,改成
input = Console.ReadKey().KeyChar;试试
星琴 - 2008-10-17 20:52:00
ReadKey()是什么?
xj040613 - 2008-10-17 21:02:00
百度一下:D
星琴 - 2008-10-17 21:36:00
。。。。好懒百度啊。。。你也温习一下嘛。。
xj040613 - 2008-10-17 22:02:00
我不学这个,呵呵
1
查看完整版本: 大家来讨论一个源代码