練習 - 使用逸出字元序列來將輸出格式化
在本練習中,您將修改上一個練習中的主控台輸出,以達到教師指定的報告格式。
格式化主控台輸出
在這項工作中,您將更新程式碼,以將最後的潤飾套用至報告輸出。 首先,您會新增標頭資料列,其中包含教師所指定的資料行標籤。 然後,您將使用字元逸出序列,在資訊行之間新增額外的填補。
在 .NET 編輯器中,找出用來顯示每個學生目前班級分數和等第成績的 Console.WriteLine() 陳述式。
在
Console.WriteLine()
陳述式上方建立空白的程式碼行。在您建立的空白程式碼行上,若要新增學生成績的標頭,請輸入下列程式碼:
Console.WriteLine("Student Grade\n");
請注意,您會在文字結尾包含
\n
。 在「使用 C# 執行基本字串格式化」課程模組中,您已了解\n
逸出字元序列會導致建立新的一行。 逸出序列的位置很重要。 在此情況下,\n
位於您想寫入主控台的資訊尾端,因此會在顯示「學生成績」之後新增新行。若要將輸出格式化為文字的對齊資料行,請以
\t
逸出序列取代文字之間的空格,如下所示:Console.WriteLine("Student\tGrade\n"); Console.WriteLine("Sophia:\t" + sophiaScore + "\tA"); Console.WriteLine("Nicolas:\t" + nicolasScore + "\tB"); Console.WriteLine("Zahirah:\t" + zahirahScore + "\tB"); Console.WriteLine("Jeong:\t" + jeongScore + "\tA");
\t
逸出序列會在文字項目之間插入定位停駐點。 新增定位停駐點應該會導致靠左對齊的資訊行。若要檢視更新的結果,請選取 [執行]。
比較應用程式的輸出與下列輸出:
Student Grade Sophia: 94.6 A Nicolas: 83.6 B Zahirah: 83.4 B Jeong: 95.4 A
請注意,雖然使用的是定位字元而非空白字元,但是某些行在學生姓名與其數值分數之間仍然沒有太多空白字元。
這項差異是因為定位間距的套用方式所造成。 定位停駐點位置以四個字元的間隔設定,每個定位字元都會前進到下一個定位停駐點位置。 如果您有五個字元組成的字串,後面接著定位字元逸出序列,則逸出序列會前進到八個字元位置的定位停駐點,使用空白字元填滿間距,以在輸出中建立空白字元。 不過,如果您有七個字元組成的字串,後面接著定位字元逸出序列,則可以前進到相同的位置。 這可讓定位字元逸出序列在其距離下一個定位停駐點位置較遠時更加明顯。
若要讓前兩個資料行之間的空格更加明顯,請在兩個較短的學生姓名後面新增另一個
\t
,如下所示:Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA"); Console.WriteLine("Nicolas:\t" + nicolasScore + "\tB"); Console.WriteLine("Zahirah:\t" + zahirahScore + "\tB"); Console.WriteLine("Jeong:\t\t" + jeongScore + "\tA");
檢查您的工作
在此工作中,您將執行程式碼,並驗證輸出是否正確。
將您的程式碼與下列項目進行比較:
int currentAssignments = 5; int sophia1 = 93; int sophia2 = 87; int sophia3 = 98; int sophia4 = 95; int sophia5 = 100; int nicolas1 = 80; int nicolas2 = 83; int nicolas3 = 82; int nicolas4 = 88; int nicolas5 = 85; int zahirah1 = 84; int zahirah2 = 96; int zahirah3 = 73; int zahirah4 = 85; int zahirah5 = 79; int jeong1 = 90; int jeong2 = 92; int jeong3 = 98; int jeong4 = 100; int jeong5 = 97; int sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5; int nicolasSum = nicolas1 + nicolas2 + nicolas3 + nicolas4 + nicolas5; int zahirahSum = zahirah1 + zahirah2 + zahirah3 + zahirah4 + zahirah5; int jeongSum = jeong1 + jeong2 + jeong3 + jeong4 + jeong5; decimal sophiaScore = (decimal) sophiaSum / currentAssignments; decimal nicolasScore = (decimal) nicolasSum / currentAssignments; decimal zahirahScore = (decimal) zahirahSum / currentAssignments; decimal jeongScore = (decimal) jeongSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA"); Console.WriteLine("Nicolas:\t" + nicolasScore + "\tB"); Console.WriteLine("Zahirah:\t" + zahirahScore + "\tB"); Console.WriteLine("Jeong:\t\t" + jeongScore + "\tA");
若要執行程式碼並顯示格式化的輸出,請選取 [執行]。
若要確認您的程式碼如預期般運作,請比較應用程式的輸出與下列輸出:
Student Grade Sophia: 94.6 A Nicolas: 83.6 B Zahirah: 83.4 B Jeong: 95.4 A
如果您的程式碼顯示不同的結果,您必須檢閱程式碼以尋找錯誤並進行更新。 再次執行程式碼,查看您是否已修正此問題。 請繼續更新和執行程式碼,直到其產生預期的結果為止。