排列printfs看起来不错并排列它们

时间:2013-02-14 11:07:45

标签: c format printf spacing

你是如何在世界上格式化这些东西排队,我尝试了一切,没有任何改变?!

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);
}

我已经尝试过Tab键,间距,那些%符号和最后一个的数字,它不会改变这个

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");
}    

2 个答案:

答案 0 :(得分: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数组。如果我们在a[i]数组中找不到unique的值,我们会添加它并递增uniqueCount

请注意,此方法效率很低,并且在MAX_ELEMENTS变大时性能会很差。有更好的解决方案,但你听起来仍然处于学习曲线的底部,所以我会留下它。

答案 1 :(得分: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