我正在编写一个过滤器,应该选择具有指定长度的所有行。我最终得到了这段代码,但我不知道如何指定n
。我的意思是,n
(以及可选的m
)应该在命令提示符中被多行替换,但我不知道如何在代码中描述它。我想到了case "%d"
,但据我所知,不可能这样写。这是我到目前为止的代码:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int n;
int m;
char line[200];
while(fgets(line,sizeof(line)/sizeof(char), stdin)!=NULL)
{
if(argc>1){
switch(argv[0][0])
{
case 'n':
strlen(line)==n;
break;
case '#n':
strlen(line)<n;
break;
case 'n m':
strlen(line)>=n && strlen(line)<=m;
break;
case 'n#':
strlen(line) > n;
break;
}
printf("%s\n", line);
}}
return 0;
}
你的帮助对我意义重大!我不知道如何让它继续工作。
答案 0 :(得分:0)
我认为你应该在你的循环之外解析命令行。假设您要求程序的调用者在命令行中指定n
和m
,那么抓住前两个参数并将它们转换为整数就很简单了,然后循环你的标准输入。像这样:
/* call this minmax.c */
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
int n, m, len;
char line[200];
if (argc < 3) {
printf("Must specify min & max line length.");
return -1;
}
n = atoi(argv[1]);
m = atoi(argv[2]);
while(fgets(line, 200, stdin) != NULL) {
len = strlen(line);
if (len >=n && len <= m)
printf(line);
}
return 0;
}
假设您正在运行* nix:
cc -ominmax minmax.c
然后用最小和最大线长度
调用它./minmax 2 5
这将回显您键入的每行至少2个字符,但不超过5个字符。