none
C#初學者,請問程式問題 RRS feed

  • 問題

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

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string billno = "";
                string Hitno = "12345678";

                while (true)
                {
                    Console.Write("\n請輸入發票號碼?<0結束>");
                    billno = Convert.ToString(Console.ReadLine()).Trim();
                    if (billno == Hitno)
                    {
                        Console.Write("\n中頭獎{0}-{1}獎金20萬 !\n", Hitno, billno);
                        break;
                    }
                    else if (billno.Substring(1,7) == Hitno.Substring(1, 7))
                    {
                        Console.Write("\n中二獎{0}-{1}獎金4萬 !\n", Hitno, billno.Substring(1, 7));
                        break;
                    }
                }
                Console.Read();

            }
        }
    }

    想請問,這樣的寫法可以印出中頭獎跟二獎

    那如果我想在新增3(重6個)、4(重5個)、5(重4個)、6(重3個)獎

    並且如果輸入不足8位數會會顯示提醒必須輸入8個位數

    以及沒中獎  大概要怎麼寫呢??

    請高手幫幫忙唷

    2013年12月26日 下午 01:00

解答

  • Hi,

    先確定字串長度正確後再進入比較,不然就檢查是不是為0。

    比較可以用字串比對看中幾個數字,然後再對應出中那個獎,大約如下,請你再依你的需求調整,

    static void Main(string[] args)
            {
                string billno = "";
                string Hitno = "12345678";
                string[] HitAward = new string[] { "沒中獎", "沒中獎", "沒中獎", "6獎", "5獎", "4獎", "3獎", "2獎", "頭獎" };
                while (true)
                {
                    Console.Write("\n請輸入發票號碼?<0結束>");
                    billno = Convert.ToString(Console.ReadLine()).Trim();
                    int hitCount = 0;
                    //先check 8位
                    if (billno.Length == 8)
                    {
                        string[] hitnoArr = Hitno.Select(c => c.ToString()).ToArray();
                        string[] billnoArr = billno.Select(c => c.ToString()).ToArray();
                        bool isHit = true;
                        for (int i = 7; i > -1; i--)
                        {
                            if (string.Compare(hitnoArr[i], billnoArr[i]) == 0 && isHit)
                            {
                                hitCount += 1;
                            }
                            else
                            {
                                isHit = false;
                            }
                        }
                        //3(重6個)、4(重5個)、5(重4個)、6(重3個)獎
                        Console.Write("\n{0} {1}-{2} !\n",HitAward[hitCount], Hitno, billno);
                    }
                    else if(billno=="0"){
                        break;
                    }
                    else
                    {
                        Console.Write("\n發票輸入錯誤! \n");
                    }
                    
                }
                Console.Read();
            }


    • 已標示為解答 Brant17 2013年12月26日 下午 03:47
    2013年12月26日 下午 01:44

所有回覆

  • 抱歉

    3  4  5  6 獎  已經都打出來了

    現在只差如果不足8位數  印出  必須輸入8位數

    沒中獎

    2013年12月26日 下午 01:18
  • 原理都一樣....

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年12月26日 下午 01:31
    版主
  • Hi,

    先確定字串長度正確後再進入比較,不然就檢查是不是為0。

    比較可以用字串比對看中幾個數字,然後再對應出中那個獎,大約如下,請你再依你的需求調整,

    static void Main(string[] args)
            {
                string billno = "";
                string Hitno = "12345678";
                string[] HitAward = new string[] { "沒中獎", "沒中獎", "沒中獎", "6獎", "5獎", "4獎", "3獎", "2獎", "頭獎" };
                while (true)
                {
                    Console.Write("\n請輸入發票號碼?<0結束>");
                    billno = Convert.ToString(Console.ReadLine()).Trim();
                    int hitCount = 0;
                    //先check 8位
                    if (billno.Length == 8)
                    {
                        string[] hitnoArr = Hitno.Select(c => c.ToString()).ToArray();
                        string[] billnoArr = billno.Select(c => c.ToString()).ToArray();
                        bool isHit = true;
                        for (int i = 7; i > -1; i--)
                        {
                            if (string.Compare(hitnoArr[i], billnoArr[i]) == 0 && isHit)
                            {
                                hitCount += 1;
                            }
                            else
                            {
                                isHit = false;
                            }
                        }
                        //3(重6個)、4(重5個)、5(重4個)、6(重3個)獎
                        Console.Write("\n{0} {1}-{2} !\n",HitAward[hitCount], Hitno, billno);
                    }
                    else if(billno=="0"){
                        break;
                    }
                    else
                    {
                        Console.Write("\n發票輸入錯誤! \n");
                    }
                    
                }
                Console.Read();
            }


    • 已標示為解答 Brant17 2013年12月26日 下午 03:47
    2013年12月26日 下午 01:44
  • 把迴圈改為用後測型迴圈do while這方法比較適合
    後測型迴圈do while:第一次一定會執行,執行完再去判斷有無輸入8個位數這樣級可達成你要的要求
    DO WHILE

    • 已編輯 ALore 2013年12月26日 下午 02:21
    2013年12月26日 下午 02:18
  • 謝謝你的解答!!  感謝唷  很有幫助
    2013年12月26日 下午 03:46
  • 謝謝你唷^^
    2013年12月26日 下午 03:46