2014-04-08 3 views
1

일부 병렬 배열을 반복하고 루프 제어 변수에서 내용을 인쇄하는 기능이 있습니다. 내 프로그램에서 루프 제어 변수의 값인 ID과 관련된 이름을 인쇄하는 데 사용되는 또 다른 코드가 있습니다. 여기C++ - Trouble aligning output

void PrintName(int ID) 
{ 
    switch (ID) 
    { 
    case 0: cout << "computer(s)"; 
     break; 
    case 1: cout << "pencil(s)"; 
     break; 
    case 2: cout << "pen(s)"; 
     break; 
    case 3: cout << "book(s)"; 
     break; 
    case 4: cout << "beer(s)"; 
     break; 
    case 5: cout << "ruler(s)"; 
     break; 
    case 6: cout << "stereo(s)"; 
     break; 
    case 7: cout << "refrigerator(s)"; 
     break; 
    case 8: cout << "desk(s)"; 
     break; 
    case 9: cout << "backpack(s)"; 
     break; 
    } 
} 

void PrintSummary(InvIDList invIDs, ItemQuantity itemQuant, int totalWeight, int totalPurch, int budget) 
{ 
    cout << "ID  NAME  QUANTITY" <<endl; 
    cout << "--------------------------" <<endl; 
    for(int i = 0; i < 10; i++){ 
     cout << invIDs[i]; 
     PrintName(i); 
     cout << itemQuant[i] <<endl; 
    } 
    cout << "\n\nTotal Amount Spent: $" << totalPurch <<endl; 
    cout << "Amount of Budget Remaining: $" << budget <<endl; 
    cout << "Total Weight of Items Purchased: " << totalWeight <<endl; 
} 

내가 출력 ID되는 좌측의 정중 아래 ID, NAMEQUANTITY, QUANTITY이되는 우측 및 NAME가 중심 정렬 할 2 개 함수이다. 불행하게도 나는 코드를 수정하여 몇 시간이 지난 후에 이것을 달성하는 방법을 알아낼 수 없으며 주로 QUANTITY이 오른쪽으로 정렬되어 있습니다.

+0

기본 인쇄용으로 iostreams 대신 printf()를 사용합니다. 패딩 (padding)은 한 가지 문제이며 다음은 숫자를 어떻게 형식화합니까? 끝없는 고통입니다. – swdev

답변

1

PrintName 함수를 사용하는 대신 std :: cout과 함께 사용할 문자열 개체를 반환하려고합니다. 열을 올바르게 정렬하려면 <iomanip> 헤더 및 특히 std :: setw (n) 조작자를 살펴볼 수 있습니다.

예를 들어, 열 너비를 16 자로 설정하는 동안 각 카테고리의 최대 문자 수를 계산하고 그에 따라 너비를 변경하는 것이 중요합니다. 이것에 대해 좋은 점은 각 열에 대해 다른 너비를 지정할 수 있다는 것입니다. 위에 주어진

string ReturnName(int ID) 
{ 
    switch (ID) 
    { 
    case 0: return "computer(s)"; 
     break; 
    case 1: return "pencil(s)"; 
     break; 
    case 2: return "pen(s)"; 
     break; 
    case 3: return "book(s)"; 
     break; 
    case 4: return "beer(s)"; 
     break; 
    case 5: return "ruler(s)"; 
     break; 
    case 6: return "stereo(s)"; 
     break; 
    case 7: return "refrigerator(s)"; 
     break; 
    case 8: return "desk(s)"; 
     break; 
    case 9: return "backpack(s)"; 
     break; 
    } 
} 

void PrintSummary(InvIDList invIDs, ItemQuantity itemQuant, int totalWeight, int totalPurch, int budget) 
{ 
cout << left << setw(16) << "ID"; 
cout << left << setw(16) << "NAME"; 
cout << left << setw(16) << "QUANTITY" << endl; 
cout << "--------------------------------------" << endl; 
for(int i = 0; i < 10; i++){ 

    cout << left << setw(16) << invIDs[i]; 
    cout << left << setw(16) << ReturnName(i); 
    cout << left << setw(16) << itemQuant[i] << endl; 
} 
cout << "\n\nTotal Amount Spent: $" << totalPurch <<endl; 
cout << "Amount of Budget Remaining: $" << budget <<endl; 
cout << "Total Weight of Items Purchased: " << totalWeight <<endl; 
} 
0

PrintName에 이름을 인쇄하지 말고 이름을 문자열로 반환하십시오. 그런 다음 루프에서 열을 올바르게 정렬하는 데 필요한 모든 정보를 얻습니다.

아, PrintName의 이름을 변경하고자 할 수 있습니다.

0

는 U는

cout << "ID  NAME  QUANTITY" <<endl; 

U이 공간을 가정하는 등의 제목을 인쇄 한하지만 당신은 모르실 얼마나 많은 공간이

invIDs[i] 

PrintName(i); 

가져가. 최대량을 돌볼 수있어. 각 이들의 imum 길이. 스위치의 출력물 중 최대 길이는 무엇인지 알 수 있습니다. 그런 다음 많은 공백을 포함하여 제목 인쇄 문을 수정할 수 있습니다.