iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Software Development

C#世界初探險系列 第 7

2022鐵人賽 Day 07 輸入跟格式化輸出控制

  • 分享至 

  • xImage
  •  

嗨嗨~我是嚮導
昨天已經介紹完運算子了
今天要來講講主控台應用程式的輸入跟輸出
之前我們已經用過Write/WriteLine來進行輸出了
那我們今天一樣來簡單介紹一下輸入跟輸出會用到的方法
輸出的話一樣有Read跟ReadLine

Console類別的方法 說明
Write 將輸出串流(Output Stream)由指定的輸出裝置(預設是螢幕)顯示出來。
WriteLine 將輸出串流(Output Stream)及換行控制字元(Carriage return)由指定的輸出裝置(預設是螢幕)顯示出來。
Read 由指定輸入裝置(預設是鍵盤)將鍵入的一個字元讀進來形成一個輸入串流(Input Stream)並放入指定的變數。
ReadLine 由指定輸入裝置(預設是鍵盤)將鍵入的一行字串讀進來形成一個輸入串流(Input Stream)並放入指定的變數。也就是ReadLine()方法允許接受一連串的輸入串流(一行字元)直到按下Enter。

那我們簡單的實作一下吧

            string Name;
            Console.Write("輸入名子:");
            Name = Console.ReadLine();
            Console.WriteLine("你好阿~" + Name);

輸入輸出

最後最後結合上次學到的算術運算子來做個實作
有X跟Y兩個浮點數輸入
輸入後按下Enter
要分別顯示X+Y、X-Y、X*Y、X/Y跟X%Y

            float X, Y;
            Console.Write("輸入數字X:");
            X = int.Parse(Console.ReadLine());
            Console.Write("輸入數字Y:");
            Y = int.Parse(Console.ReadLine());
            Console.WriteLine(X + "+" + Y + "=" + (X + Y));
            Console.WriteLine(X + "-" + Y + "=" + (X - Y));
            Console.WriteLine(X + "*" + Y + "=" + (X * Y));
            Console.WriteLine(X + "/" + Y + "=" + (X / Y));
            Console.WriteLine(X + "%" + Y + "=" + (X % Y));

輸入加減乘除

再來之後我們再進行輸出時,也會希望格式好看(?
比如...醬

示範格式輸出

那我們要怎麼進行格式化輸出呢?
讓我們看看吧!

字元 功能
C或c 以貨幣方式顯示資料,以$開頭
Dn或dn 以指定n位數顯示十進位資料,空白處補0
E或e 以指數方式顯示資料
Fn或fn 以小數有n位來顯示資料
G或g 以一般格式顯示
N或n 使用千位符號但不包含$符號,若為N1表保留小數至第一位,若為N或N2都保留小數至第二位
X或x 資料以16進制顯示

範例:

            int num1 = 123456, num2 = -123456;
            double num3 = 987.654, num4 = -987.654;
            Console.WriteLine("num1=" + num1 + " num2=" + num2 + " num3=" + num3 + " num4=" + num4);
            Console.WriteLine("num3 num4的C/c3格式:");
            Console.WriteLine("num3= {0:C} num4={1:c3}", num3, num4);
            Console.WriteLine("num1 num2的D9/d3/D格式:");
            Console.WriteLine("num1= {0:D9} num2={1:d3} num2={2:D}", num1, num2, num2);
            Console.WriteLine("num3 num4的E/e2格式:");
            Console.WriteLine("num3= {0:E} num4={1:e3}", num3, num4);
            Console.WriteLine("num3 num4的F1/f格式:");
            Console.WriteLine("num3= {0:F1} num4={1:f}", num3, num4);
            Console.WriteLine("num3 num4的G3/g/G/g4格式:");
            Console.WriteLine("num3= {0:G3} num4={1:g} num3= {0:G} num4={1:g4}", num3, num4);
            Console.WriteLine("num1 num2的N3/n格式:");
            Console.WriteLine("num1= {0:N3} num2={1:n}", num1, num2);
            Console.WriteLine("num1 num2的X格式:");
            Console.WriteLine("num1= {0:X} num2={1:x}", num1, num2);

格式化輸出

但...各位勇者是不是發現
我剛剛的示範好像跟上面說的不一樣啊!
等等喔~因為還有一個叫做自訂數值格式輸出字串

格式字元 功能
0:零值預留位置 若顯示數值的位數比設定格式的位數小,資料向右靠齊顯示,未用到的位數以0取代。若數值資料比設定格式位數大,則以該數值大小直接顯示。
#:數字預留位置 若顯示數值的位數比設定格式的位數小,資料向右靠齊顯示,未用到的位數以空白取代。若數值資料比設定格式位數大,則以該數值大小直接顯示。
.:小數點 由小數點右邊的位數來決定小數的位數,若資料的小數位數超過設定的小數位數,會做四捨五入。小數前後可使用#或0格式字元。
,:千位分隔符號和數值縮放 使用千位分隔符號,若千位分隔符號放一個在最後面,該數值會除以1000顯示,連續兩個千位分隔字元除以1000000,以此類推。
%:百分比預留位置 使用%格式字元會將數值除以100顯示。
E:科學標記法 使用科學記號會以指數方式顯示。
\:溢出字元 使用溢出字元,接在溢出字元後面的字元會被當作指定的特殊意義來處理。
'ABC'|"ABC":常值字串 使用單/雙引號,會將括住的字串複製到輸出字串內直接顯示出來。

範例:

            double m1 = 0912345678, m3 = -2.455, m4 = 100000000, m5 = 0.075, m6 = 0.512458;
            int m2 = -12345;
            Console.WriteLine("1. " + m1.ToString("(0#) ########"));
            Console.WriteLine("2. " + m2.ToString("######"));
            Console.WriteLine("3. " + m2.ToString("000000"));
            Console.WriteLine("4. " + m3.ToString("#.##"));
            Console.WriteLine("5. " + m3.ToString("0.00000"));
            Console.WriteLine("6. " + m3.ToString("00.00"));
            Console.WriteLine("7. " + m4.ToString("#,#"));
            Console.WriteLine("8. " + m4.ToString("#,") + "k");
            Console.WriteLine("9. " + m4.ToString("#,,") + "M");
            Console.WriteLine("10. " + m4.ToString("#,#,") + "k");
            Console.WriteLine("11. " + m5.ToString("#0.##%"));
            Console.WriteLine("12. " + m5.ToString("#0.##%"));
            Console.WriteLine("13. " + m4.ToString("#0.##E+0"));
            Console.WriteLine("14. " + m1.ToString("[0###-###-###]"));

自訂格式化輸出

再來最後,如果我們要插入'、"、\等等字元的話,該怎麼辦呢?

溢出序列字元 說明
\' 插入一個單引號。
\" 插入一個雙引號。
\\ 插入一個倒斜線,當程式定義檔案路徑時有用。
\a 觸發一個系統的警告聲。
\b 退一格。
\n 換一行。
\r 游標移到目前該行最前面。
\t 插入水平跳格到字串中。
\udddd 插入一個Unicode字元。
\v 插入垂直跳格到字串中。
\0 代表一個空字元。

簡單示範一下:

            string str1 = "勇者說:\"嗨!C#世界\"";
            Console.Write("\t" + str1);
            Console.WriteLine("\t" + "美好世界我來了!");
            Console.Write("\n我是OOXX\n");
            Console.WriteLine("D:\\VS 2022");
            Console.WriteLine(@"D:\VS 2022");

溢出序列字元

今天就先到這邊打住吧,大家掰掰~~

參考資料:
Visual C# 2015程式設計經典


上一篇
2022鐵人賽 Day 06 運算子精靈
下一篇
2022鐵人賽 Day 08 if...else if...else...
系列文
C#世界初探險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言