【发布时间】:2012-09-10 08:41:38
【问题描述】:
您好,我正在做一个项目,我需要我的程序从命令行运行,并且能够读取将在程序中使用的标志和文件名。
这是我当前的代码。它在不输入任何标志的情况下编译。我不认为我的 GetArgs 有任何作用。我对那部分代码有帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */
int numInputArgs;
int idx;
void GetArgs (int argc, char **argv){
for (idx = 1; idx < 4; idx++) {
if (strcmp(argv[idx], "-c") == 0) {
printf("Flag -c passed\n");
break;
}
else if (strcmp(argv[idx], "-w") == 0) {
printf("Flag -w passed\n");
break;
}
else if (strcmp(argv[idx], "-l") == 0) {
printf("Flag -l passed\n");
break;
}
else if (strcmp(argv[idx], "-L") == 0) {
printf("Flag -L passed\n");
break;
}
else {
printf("Error: unknown flag\n");
exit(-1);
}
}
}// end GetArgs
void lineWordCount ( ) {
int c, nl, nw, nc, state;
state = OUT; nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN; ++nw;
}
printf("%d %d %d\n", nl, nw, nc);
}
}// end lineWordCount
int main(int argc, char **argv){
GetArgs(argc, argv);
lineWordCount();
printf("Hello");
//fclose( src );
}
【问题讨论】:
-
仅供参考:作业标签已弃用。
-
你说得对,
GetArgs所做的只是打印参数。如果您使用的是 POSIX 机器(如 Linux 或 Mac OSX),我建议您查看getopt。如果您搜索,还有许多可用的参数解析库,例如上面提到的getopt函数在Windows中也存在。 -
您的 GetArgs 完美地完成了应有的工作:
$ gcc -o issue issue.c$ ./issue.exe a b cabc 那么,您的问题到底是什么? -
我需要 GetArgs 能够扫描决定最后显示什么信息的四个潜在标志。在处理文件之前。
标签: c command-line command-line-arguments word-count