您好我试图找到用户是否使用命令行将特定文件名传递给我的程序,如果用户没有,我将提示用户输入所需的文件名。
此外,我必须使用预处理命令来执行此操作。
int main(int argc, char * argv[])
{
char original[100] = "";
char sorted[100] = "";
if (argc == 0 || argc == 1)
{
#define PROMPT 1
}
FILE * f;
FILE * s;
#ifdef PROMPT
printf("Please input original file name: ");
scanf("%s", original);
f = fopen(original, "rw");
printf("Please input sorted file name: ");
scanf("%s", sorted);
s = fopen(sorted, "rw");
#else
f = fopen(argv[1], "rw");
s = fopen(argv[2], "w");
#endif
}
答案 0 :(得分:1)
您不能在运行时使用preprossor命令。这就是为什么它被称为 预处理器。
你需要这个:
int main(int argc, char * argv[])
{
char original[100] = "";
char sorted[100] = "";
bool prompt = false;
if (argc == 0 || argc == 1)
{
prompt = true;
}
FILE * f;
FILE * s;
if (prompt)
{
printf("Please input original file name: ");
scanf("%s", original);
f = fopen(original, "rw");
printf("Please input sorted file name: ");
scanf("%s", sorted);
s = fopen(sorted, "rw");
else
{
f = fopen(argv[1], "rw");
s = fopen(argv[2], "w");
}
}
或许你想要这个:
#define PROMPT 1
int main(int argc, char * argv[])
{
char original[100] = "";
char sorted[100] = "";
FILE * f;
FILE * s;
#if PROMPT
printf("Please input original file name: ");
scanf("%s", original);
f = fopen(original, "rw");
printf("Please input sorted file name: ");
scanf("%s", sorted);
s = fopen(sorted, "rw");
#else
if (argc == 0 || argc == 1)
{
printf("wrong command line arguments\n");
return 1;
}
#endif
f = fopen(argv[1], "rw");
s = fopen(argv[2], "w");
}
有了这个,你可以编译你的程序的两个版本。如果使用#define PROMPT 1
进行编译,则会获得始终提示输入的版本,如果使用#define PROMPT 0
进行编译,则会获得始终采用命令行参数的版本。
旁注(与您的问题没有直接关系)
您的测试参数数量是否正确是错误的:argc
至少为1,因为它是命令行参数的数量,包括命令本身的名称,因此测试应该是:
if (argc == 1 || argc == 2)
甚至更好
if (argc != 3)