2016-03-01 57 views
-4

我知道如何将它们向后,向前等打印出来。但是,我在垂直打印命令行时遇到问题。谁能解释一下?如何垂直打印命令行参数?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) { 
    int j; 
    int i = 0; 
    for (i = 1; i < argc; i++) 
    { 
     char *tmp = argv[i]; 
     int len = strlen(argv[i]); 
     for(j = len-1; j > -1; --j) 
      printf("%c",tmp[j]); 
     printf("\n"); 
    } 
    return 0; 
} 

这是我从命令行向后打印的东西,但是如何使它垂直打印?

+2

你究竟是什么意思的垂直?请详细描述一下,并告诉我们你到目前为止所尝试过的。 –

+0

我编辑它以显示我有什么。 –

+3

您发布的代码向后打印参数,但水平。控制台只能水平打印,因此您必须“转置”您的逻辑,即切换行和列的访问权限:在第一行中打印所有参数的第一个字母,在第二行中打印字符串的第二个字母。当然,您必须确保字符串的字母数与您为每个字符串打印的列数一样多。 –

回答

1

我想你想拥有像

a a a a 
r r r r 
g g g g 
1 2 3 4 

这样的想法会在第一行打印每个arg的第一个字符,在第二行的下一个字符,直到最后

int main(int argc, char *argv[]) { 
    int j; 
    int i = 0; 
    int argsLength[argc]; 
    int maxLength = 0; 

    // get lengths or args 
    for (i = 0; i < argc - 1; i++) 
    { 
     argsLength[i] = strlen(argv[i+1]); 
     if(argsLength[i]>maxLength) {maxLength = argsLength[i];} 
    } 
    for (i=0;i<maxLength;i++) 
    { 
     for(j=0;j<argc-1;j++) { 
      if(argsLength[j]<i) { 
       printf("%c ",argv[j+1][i]); 
      }else{ 
       printf(" "); // put a blank when not char should be printed 
      } 
     } 
     printf("\n"); 
    } 
    return 0; 
}