命令行参数和C中的读取文件/打印文本

我正在尝试使用命令行参数和解析C中的文本文件。基本上我希望能够输入两个数字,如1和4,并让它读取文本文件的列然后将其打印到stdout。 我希望能够做到这样的事情:

PID TTY TIME CMD 449 ttys000 0:00.35 -bash 1129 ttys001 0:00.35 -bash 25605 ttys001 0:00.15 vi prog.c 6132 ttys002 0:00.11 -bash 6208 ttys002 0:00.03 vi test 

并做:

 ./your_prog 1 4 < data.txt PID CMD 449 bash 1129 -bash 25605 vi 6132 -bash 6208 vi 

所以我需要输入我要打印的列,将文件重定向到“data.txt”并让它处理文件并打印出来。

到目前为止,我的代码是:

  #include  int main(int argc, char **argv){ //int row = argc[0]; //int col = argc[1]; //if number entered is less than one, re-enter int i; for (i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } if(argc < 1){ fprintf(stderr, "Enter a valid input"); //quit return 1; } else{ char ch[256]; //ch[255] = '\0'; while(fgets(ch, 256, stdin) != NULL){ printf("%s", ch); } } return 1; } 

但我不确定我是否在正确的轨道上并且对于接下来该做什么感到困惑。 我是C的新手,所以如果这是一个简单的问题,我道歉。

为了帮助您入门,这改进了您收集命令行信息的方式。 注意第一个参数argv[0]是可执行文件本身的名称。 请记住以上评论,我没有进一步改进。 语法是progname filename col1 col2

 #include  #include  void fatal(char *msg) { printf("%s\n", msg); exit (1); } int main(int argc, char*argv[]) { int col1, col2; FILE *fp; char ch[256]; if(argc < 4) fatal("Need three arguments"); if (sscanf(argv[2], "%d", &col1) != 1) fatal("Argument 1 error"); if (sscanf(argv[3], "%d", &col2) != 1) fatal("Argument 2 error"); printf("Read columns %d and %d from file %s\n", col1, col2, argv[1]); if ((fp = fopen(argv[1], "r")) == NULL) fatal("Unable to open file"); // process the file while (fgets(ch, 256, fp) != NULL) { printf("%s", ch); } fclose(fp); return 0; } 

这是我到目前为止所拥有的。 我可以把它拆开然后我可以把它放回去,但是对于我的生活,我无法弄清楚如何告诉它只打印第一列。 如果我可以有一些方向,那么我可以弄清楚如何做其余的,但我可以找到任何东西。 这是我到目前为止的代码:

 #include  #include  int main(int argc, char **argv){ int col1, col2; int size = 512; char ch[size]; char *temp[size]; char *token; if(argc == 1){ fprintf(stderr, "I need more!\n"); return 1; } else{ //test to see what is stored int i; for (i = 0; i < argc; i++) { printf("argv[%d] = %s\n", i, argv[i]); } if(sscanf(argv[1], "%d", &col1) != 1) return 1; if(sscanf(argv[2], "%d", &col2) != 1) return 1; while(fgets(ch, size, stdin) != NULL){ //get 1st token token = strtok(ch, " "); while(token != NULL){ printf(" %s", token); temp[i++] = token; token = strtok(NULL, " "); } } return 0; } }