練習 - 使用逸出字元序列來將輸出格式化

已完成

在本練習中,您將修改上一個練習中的主控台輸出,以達到指定的報告格式。

格式化主控台輸出

在這項工作中,您將更新程式碼,以將最後的潤飾套用至報告輸出。 首先,您會包含學生的名稱,並新增包含資料行標籤的標頭資料列。 然後,您將使用字元逸出序列,在資訊行之間新增額外的填補。

  1. 在 .NET 編輯器中,找出用來顯示學生課程資訊的 Console.WriteLine() 陳述式。

  2. 在 Console.WriteLine() 陳述式上方建立空白的程式碼行。

  3. 在您建立的空白程式碼行上,若要新增學生的名稱,請輸入下列程式碼:

    Console.WriteLine($"Student: {studentName}\n");
    
    

    請注意,您會在文字結尾包含 \n。 在「使用 C# 執行基本字串格式化」課程模組中,您已了解 \n 逸出字元序列會導致建立新的一行。 逸出序列的位置很重要。 在此情況下,\n 位於您想寫入主控台的資訊尾端,因此會在顯示「學生名稱」之後新增新行。

  4. 在上一個 Console.WriteLine() 陳述式之後建立空白程式碼行。

  5. 在您建立的空白程式碼行上,若要新增課程資訊的標頭,請輸入下列程式碼:

    Console.WriteLine("Course\t\t\t\tGrade\tCredit Hours");
    
    

    請注意,您會在課程名稱後面新增四個定位點。 額外的定位停駐點會將額外的空間留給較長的課程名稱。

  6. 若要將輸出格式化為文字的對齊資料行,請以 \t 逸出序列取代文字之間的空格,如下所示:

    Console.WriteLine($"{course1Name}\t\t\t{course1Grade}\t\t{course1Credit}");
    Console.WriteLine($"{course2Name}\t\t\t{course2Grade}\t\t{course2Credit}");
    Console.WriteLine($"{course3Name}\t\t\t{course3Grade}\t\t{course3Credit}");
    Console.WriteLine($"{course4Name}\t{course4Grade}\t\t{course4Credit}");
    Console.WriteLine($"{course5Name}\t\t{course5Grade}\t\t{course5Credit}");
    
    

    \t 逸出序列會在文字項目之間插入定位停駐點。 這些定位停駐點應會導致靠左對齊的資訊行。

    請注意,您會減少 course4Namecourse5Name 的定位點數目。 此差異是因為這些課程名稱比其他課程名稱還要長。 在上一個步驟中,您在課程名稱資料行後面新增了額外的定位點,讓長和短課程名稱的間距保持一致。

  7. 若要將填補新增至最終 GPA 結果輸出,請更新程式碼,如下所示:

    Console.WriteLine($"\nFinal GPA:\t\t\t {leadingDigit}.{firstDigit}{secondDigit}");
    
    

檢查您的工作

在此工作中,您將執行程式碼,並驗證輸出是否正確。

  1. 檢查您的程式碼是否類似下列內容:

    string studentName = "Sophia Johnson";
    string course1Name = "English 101";
    string course2Name = "Algebra 101";
    string course3Name = "Biology 101";
    string course4Name = "Computer Science I";
    string course5Name = "Psychology 101";
    
    int course1Credit = 3;
    int course2Credit = 3;
    int course3Credit = 4;
    int course4Credit = 4;
    int course5Credit = 3;
    
    int gradeA = 4;
    int gradeB = 3;
    
    int course1Grade = gradeA;
    int course2Grade = gradeB;
    int course3Grade = gradeB;
    int course4Grade = gradeB;
    int course5Grade = gradeA;
    
    int totalCreditHours = 0;
    totalCreditHours += course1Credit;
    totalCreditHours += course2Credit;
    totalCreditHours += course3Credit;
    totalCreditHours += course4Credit;
    totalCreditHours += course5Credit;
    
    int totalGradePoints = 0;
    totalGradePoints += course1Credit * course1Grade;
    totalGradePoints += course2Credit * course2Grade;
    totalGradePoints += course3Credit * course3Grade;
    totalGradePoints += course4Credit * course4Grade;
    totalGradePoints += course5Credit * course5Grade;
    
    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    int leadingDigit = (int) gradePointAverage;
    int firstDigit = (int) (gradePointAverage * 10 ) % 10;
    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    
    Console.WriteLine($"Student: {studentName}\n");
    Console.WriteLine("Course\t\t\t\tGrade\tCredit Hours");
    
    Console.WriteLine($"{course1Name}\t\t\t{course1Grade}\t\t{course1Credit}");
    Console.WriteLine($"{course2Name}\t\t\t{course2Grade}\t\t{course2Credit}");
    Console.WriteLine($"{course3Name}\t\t\t{course3Grade}\t\t{course3Credit}");
    Console.WriteLine($"{course4Name}\t{course4Grade}\t\t{course4Credit}");
    Console.WriteLine($"{course5Name}\t\t{course5Grade}\t\t{course5Credit}");
    
    Console.WriteLine($"\nFinal GPA:\t\t\t {leadingDigit}.{firstDigit}{secondDigit}");
    
  2. 若要執行程式碼並顯示格式化的輸出,請選取 [執行]。

  3. 若要確認您的程式碼如預期般運作,請比較應用程式的輸出與下列輸出:

    Student: Sophia Johnson
    
    Course              Grade   Credit Hours	
    English 101         4       3
    Algebra 101         3       3
    Biology 101         3       4
    Computer Science I  3       4
    Psychology 101      4       3
    
    Final GPA:          3.35
    

    如果您的程式碼顯示不同的結果,您必須檢閱程式碼以尋找錯誤並進行更新。 再次執行程式碼,查看您是否已修正此問題。 請繼續更新和執行程式碼,直到其產生預期的結果為止。