我正在使用XCode,我正在尝试打开一个作为命令行参数传递的文件,并将作为该文件的命令行参数传递的行数输出到C中的控制台。在XCode中,我的参数是“test.rtf”和“5”。我的rtf看起来像:
line 1 test
line 2 test
line 3 test
line 4 test
line 5 test
line 6 test
line 7 test
line 8 test
line 9 test
line 10 test
我和我的rtf在我的XCode项目文件夹所在的文件夹中以及可执行文件所在的Debug文件夹中尝试过这个。我的代码是:
#include <stdio.h>
#include <stdlib.h>
#define CORRECT_PARAMETERS 2
int main(int argc, char *argv[])
{
int x;
if (argc != CORRECT_PARAMETERS) {
printf("Wrong number of parameters inputted.");
}
else {
FILE *inFp; /*declare a file pointer */
if ((inFp = fopen(argv[0], "r") == NULL)) {
fprintf(stderr, "Can't open file");
exit(EXIT_FAILURE);
}
else {
for (x = 1; x <= argv[1]; x++) {
while ((x = fgetc(inFp)) != EOF) {
printf("%c", x);
}
}
}
fclose(inFp);
}
}
我知道我的代码输出在命令行输入的行数可能不正确,但我不能让开头部分只打开文件。输出的是:
Wrong number of parameters inputted.
谢谢!
答案 0 :(得分:10)
在XCode中,我的参数是“test.rtf”, 和“5”。
那么,argc将取3的值。
argv [0]:程序名称
argv [1]:“test.rtf”
argv [2]:5
您应该更新已定义的常量以取值3.
if ((inFp = fopen(argv[0], "r") == NULL))
argv [0]是正在执行的程序的名称。
您正在寻找的(第一个参数)是argv [1]
int x;
for (x = 1; x <= argv[1]; x++) {
这闻起来很麻烦。您正在将c字符串与整数进行比较。 试试这个(包括使用参数2而不是1,如上所述):
int x;
int limit = atoi(argv[2]);
for (x = 1; x <= limit; x++)
您在此处更改X的值。
while ((x = fgetc(inFp)) != EOF)
赋值x = 1只发生一次!!!将inFp读入另一个变量。