最后删除额外的空间或开始

时间:2014-03-26 09:18:19

标签: c

这个程序将任意大小的矩阵打印成螺旋顺序,但问题是它在输出的末尾也增加了一个空间,我不想在开始时有额外的空间。 我可以在每个代码中插入一个标志来检查它们是否是第一次执行,然后使用"%d"或"%d"因此,对于大矩阵,所有if块将执行不止一次,并且在第一次执行时答案将正确间隔,然后全部没有空格。

#include<stdio.h>
int main()
{
    int m,n;
    int A[20][20],T,B,L,R,j,i,dir=0;
    scanf("%d%d",&m,&n);
    T=0;B=m-1;L=0;R=n-1;
    //inpu array
    for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
                {
                    scanf("%d",&A[i][j]);
                }
        }

    while(T<=B && L<=R)
        {
            //right move
            if(dir==0)
                {
                    for(i=L;i<=R;i++)
                        {
                            printf("%d ",A[T][i]);
                        }
                    T++;
                    dir=1;
                 } 
            //down move
            if(dir==1)
                {
                     for(i=T;i<=B;i++)
                        {
                            printf("%d ",A[i][R]);
                        }
                    R--;
                    dir=2;
                }
            //left move
            if(dir==2)
                {
                    for(i=R;i>=L;i--)
                        {
                            printf("%d ",A[B][i]);
                        }
                    B--;
                    dir=3;
                }
            //top move
            if(dir==3)
                {
                    for(i=B;i>=T;i--)
                        {
                            printf("%d ",A[i][L]);
                        }
                    L++;
                    dir=0;
                }
        }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

printf("%d", data[0]);
for (int i=1; i < count; i++) {
    printf(" %d", data[i]);
}

答案 1 :(得分:0)

您可以执行相反的操作,而不是在打印每个元素后添加空格,在每个元素之前添加空格,第一个元素除外。像这样:

for (int i = 0; i < count; ++i) {
  if (i > 0) printf(" ");
  printf("%d", data[i]);
}

答案 2 :(得分:-1)

int print_status = 0;

void print(int v){
    if(print_status)
        printf(" %d", v);
    else
        print_status = printf("%d", v);
}

e.g。 printf("%d ",A[i][R]);替换为print(A[i][R]);