2013-02-14 31 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 

快把我逼瘋了改變!我沒有明白!大聲笑

編輯整個程序新問題!

#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」'。 – 2013-02-14 11:09:04

+2

您提供的代碼不會提供您提供的輸出! – Johnsyweb 2013-02-14 11:10:08

+0

嗯,我猜這些數字暫時沒什麼問題,但是我怎樣排列破折號和N和Count? – Sherifftwinkie 2013-02-14 11:10:48

回答

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 2013-02-14 18:37:44

+0

@Sherifftwinkie:當然,什麼? – 2013-02-14 18:55:13

+0

好吧我要編輯我的OP來包含我的整個程序,但我會在這裏提問。當我運行我的程序並完成所有的輸入時,它會打印出我輸入的內容以及它們旁邊的出現。現在,如果我輸入「2」6次,它會打印「2」6次,並告訴我發生了6次,我只想告訴我一次,我該怎麼做?! – Sherifftwinkie 2013-02-14 18:58:46

0

這就是你要找的。第一列有四個 - 所以最小寬度是四,下一列有大小 - 所以最小寬度是格式字符串中指定的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 2013-02-14 11:39:37

+0

按下空格鍵!見上面 – 2013-02-14 11:53:36