我正在制作一个程序,将两个文本文件与控制台参数./a -i test1.txt test2.txt
进行比较,其中-i
可以是-i
,-w
或{{ 1}}。如果没有-l
参数,我试图做的是调用特定函数,如-i
中所示,但我无法使其工作。
这是我的代码显示我的主要和我的目标,cs_character:
./a test1.txt test2.txt
其次,如果没有int cs_character(FILE* fp1, FILE* fp2, const char arg1[], const char arg2[]) {
int c1;
int c2;
int count = 0;
while((c1 = fgetc(fp1)) != EOF && (c2 = fgetc(fp2)) != EOF) {
if (c1 != c2){
printf("%s %d", "files differ: char \n", count);
break;
}
count++;
}
if(c1 == EOF && c2 != EOF)
{
printf("%s %s", "EOF on \n", arg1);
}
if(c2 == EOF && c1 != EOF)
{
printf("%s %s", "EOF on \n", arg2);
}
printf("%s", "files are equal\n");
return 0;
}
int main(int argc, char *argv[]) {
size_t i;
int j = 2;
FILE *fp1;
FILE *fp2;
fp1 = fopen(argv[2], "r");
fp2 = fopen(argv[3], "r");
for (i = 1; i < (size_t)argc && argv[i][0] == '-'; i++) {
if (argv[i][1] == '-') {
i++;
break;
}
switch(argv[i][1]) {
case 'l':
printf("%s", "part l incomplete.");
break;
case 'w':
word(fp1, fp2, argv[2], argv[3]);
break;
case 'i':
character(fp1, fp2, argv[2], argv[3]);
break;
case 'c':
cs_character(fp1, fp2, argv[2], argv[3]);
break;
case 'u':
cs_word(fp1, fp2, argv[2], argv[3]);
break;
default:
character(fp1, fp2, argv[2], argv[3]);
break;
}
}
return 1;
}
和argv[2]
的特定索引,允许多个参数但仍能检测到文件,最好的方法是什么?
答案 0 :(得分:0)
如果您在没有选项的情况下调用此选项,for
中的main()
循环将退出
立即因为argv[i][0] == '-'
是假的。它会更好
将标志设置为您想要的默认值,然后检查
用于查看用户是否指定了其他内容的参数。就像是
这样:
char option;
option = DEFAULT_OPTION;
if (argv[1][0] == '-' && argv[1][1] != '-') {
// change option depending on argv[1][1]
}
// call function depending on option