您好,我正在尝试查找用户是否使用命令行将特定文件名传递给我的程序,如果用户没有,我将提示用户输入所需的这些文件名。
此外,我必须使用预处理命令来执行此操作。
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
}
不能在运行时使用 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 argumentsn");
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)