2013-02-14 1 views
-2

줄을 서서 일을 처리 할 때이 형식을 지정하는 방법은 무엇입니까?printfs를 멋지게 꾸미고 줄을 서서 정렬하십시오.

printf("N Count\n"); 
printf("---- ------ \n"); 

for(i = 0 ; i < MAX_ELEMENTS ; i++) 
{ 
    count = getOccur(arr, MAX_ELEMENTS, arr[i]); 
    printf("%1d %1d\n", arr[i], count); 
} 

나는 탭 이동은, 간격, 마지막의 숫자와 그 % 표지판, 그것은 나를 미치게 운전이

N Count 
----- --- 
     1  1 
     2  1 
     3  1 

에서 변경 실 거예요 시도했습니다! 나는 그것을 얻지 않는다! lol

전체 프로그램 편집 새 질문!

#include <stdio.h> 

#define MAX_ELEMENTS 10 


int getOccur(int a[], int num_elements, int value); 
void printArr(int a[], int num_elements); 

int main() 
{ 
    int arr[MAX_ELEMENTS]; 
    int trim[MAX_ELEMENTS]; 
    int count, target, i; 
    int j, k, temp; 

    for(i = 0 ; i < MAX_ELEMENTS ; i++) 
    { 
     printf("Enter a variable for the array: "); 
     scanf("%d", &arr[i]); 
    } 

    for (j = 1 ; j <= MAX_ELEMENTS-1 ; j++) 
    { 
     for(k = 0 ; k <= MAX_ELEMENTS-2 ; k++) 
     { 
      if(arr[k] > arr[k+1]) 
      { 
       temp = arr[k]; 
       arr[k] = arr[k+1]; 
       arr[k+1] = temp; 
      } 
     } 
    } 

    printf("%4s %6s\n", " N ", "Count"); 
    printf("%4s %6s\n", "----", "------"); 

    for(i = 0 ; i < MAX_ELEMENTS ; i++) 
    { 
     count = getOccur(arr, MAX_ELEMENTS, arr[i]); 
     printf("%3d %4d\n", arr[i], count); 
    } 
} 

int getOccur(int a[], int tally, int value) 
{ 
    int i; 
    tally = 0; 

    for(i = 0 ; i < MAX_ELEMENTS ; i++) 
    { 
     if (a[i] == value) 
     { 
      ++tally; 
     } 
    } 

    return(tally); 

} 

void printArr(int a[], int amount) 
{ 
    int i; 

    for(i = 0 ; i < amount ; i++) 
    { 
     printf("%d ", a[i]); 
    } 

    printf("\n"); 
}  
+1

% "% 4d % 4d \ n"'시도하십시오. –

+2

입력하신 코드는 제공하신 결과를 제공하지 않습니다! – Johnsyweb

+0

글쎄, 당분간 수치가 괜찮을 것 같아.하지만 대시와 N, 백작을 어떻게 나열 할 수 있니? – Sherifftwinkie

답변

1
printf("%4s %6s\n", " N ", "Count"); 
printf("%4s %6s\n", "----", "------"); 

for(i = 0 ; i < MAX_ELEMENTS ; i++) 
{ 
    count = getOccur(arr, MAX_ELEMENTS, arr[i]); 
    printf("%4d %6d\n", arr[i], count); 
}  

해야 그 라인 모두 최대 참조하십시오.

의견의 질문에 대한 응답으로 편집

, 나의 접근 방식은 처음 arr의 모든 고유 한 값을 찾아 다른 배열 (unique를 호출)에 저장하는 것입니다. 그럼 당신은 당신의 루프에서 unique 배열을 통해 걸을 것 : 독특한 요소를 찾는으로

for (i = 0; i < uniqueCount; i++) 
{ 
    count = getOccur(arr, MAX_ELEMENTS, unique[i]); 
    printf("%4d %6d\n", unique[i], count); 
} 

, 무력 방법은 우리는 원래의 배열의 각 요소에 대해

size_t uniqueCount = 0; 
int unique[MAX_SIZE]; // needs to be same size as original array in case 
         // all values are unique 

for (i = 0; i < MAX_SIZE; i++) 
{ 
    size_t j = 0; 
    for (j = 0; j < uniqueCount; j++) 
    if (arr[i] == unique[j]) 
     break; 

    if (j == uniqueCount) 
    unique[uniqueCount++] = arr[i]; 
} 

같은 것 (처음에는 비어있는) unique 어레이를 스캔하십시오. unique 배열에서 a[i] 값을 찾지 못하면 추가하고 uniqueCount을 증가시킵니다.

이 방법은 꽤 비효율적이며 MAX_ELEMENTS가 커지면서 성능이 떨어집니다. 더 나은 솔루션을 사용할 수 있지만 학습 곡선의 맨 아래에있는 것처럼 들리므로 여기에 남겨 두겠습니다.

+0

<33333 정말 고마워요, 다른 질문을해도 될까요? – Sherifftwinkie

+0

@Sherifftwinkie : 물론입니다. –

+0

좋아요. 전체 프로그램을 포함하도록 내 OP를 편집 하겠지만 여기에서 질문을하겠습니다. 프로그램을 실행하고 입력 내용을 모두 입력하면 그 결과와 함께 입력 한 내용이 인쇄됩니다.이제 "2"와 같이 6 회 입력하면 "2"가 6 번 인쇄되고 6 번 발생한다고 말하면서 단 한 번만 말하면됩니다. 어떻게해야합니까?! – Sherifftwinkie

0

귀하가 찾고 계신 것입니다. 첫 번째 열은 네 개이므로 최소 너비는 4이고 다음 열은 크기입니다. 따라서 최소 너비는 형식 문자열에 지정된대로 6입니다. printf 매뉴얼 페이지

printf("N Count\n"); 
printf("---- ------ \n"); 

for(i = 0 ; i < MAX_ELEMENTS ; i++) 
{ 
    count = getOccur(arr, MAX_ELEMENTS, arr[i]); 
    printf("%4d %6d\n", arr[i], count); 
} 

편집

편집 첫째 printf

+0

폭이 실제로 무엇을 나타내는 지 이해하지 못합니다. 1234와 123456을 의미합니까? 또한 처음 두 개의 printf 문을 어떻게 얻을 수 있습니까? – Sherifftwinkie

+0

스페이스 바를 누르세요! 위의 내용을 참조하십시오. –

관련 문제