我正在尝试从C中的命令行运行程序,并且需要输入文件目录并输入变量。我正在尝试使用stricmp函数来读取键入命令行的代码,但我不知道如何让它读取文件(我读到的文件路径你应该放“r”)并执行计算。我在思考scanf,我也需要能够输入变量。如果有人能看到我的代码并给我一些指示,我会非常感激。谢谢!
int main(int argc, char *argv[])
{
int i = 0;
for(i < argc; i++;)
{
if(0 == stricmp("Interrogator MLV_PLV_179 r %s %s", argv[i]))
{
InterrogatorProtocol1553Flag = TRUE;
// Set DMV-179
Interrogator_OFP_Select = INT_OFP_DMV_179;
// Set MLV/PLV (Dim S-Record File)
DirectFlashProgFlag = FALSE;
// Set Fill Type to 1
Interrogator_PIR_OFP_FOP = 3;
Interrogator_PIR_ProgramID = (Interrogator_PIR_T_I << 11) |
(Interrogator_PIR_OFP_FOP << 5) |
Interrogator_PIR_RT_Address;
}
else if(0 == stricmp("Interrogator DirectFlash r r %s %s", argv[i]))
{
InterrogatorProtocol1553Flag = TRUE;
Interrogator_OFP_Select = INT_OFP_DMV_179;
DirectFlashProgFlag = TRUE;
CreateInterrogatorFlashImage;
}
else if(0 == stricmp("Interrogator MLV_PLV_183 r %s %s", argv[i]))
{
InterrogatorProtocol1553Flag = TRUE;
// Set DMV-183
Interrogator_OFP_Select = INT_OFP_DMV_183;
// Set MLV/PLV (Dim S-Record File)
DirectFlashProgFlag = FALSE;
// Set Fill Type to 6
Interrogator_PIR_OFP_FOP = 6;
Interrogator_PIR_ProgramID = (Interrogator_PIR_T_I << 11) |
(Interrogator_PIR_OFP_FOP << 5) |
Interrogator_PIR_RT_Address;
}
else if(0 == stricmp("Interrogator SRecord r r %s %s", argv[i]))
{
InterrogatorProtocol1553Flag = TRUE;
Interrogator_OFP_Select = INT_OFP_DMV_183;
DirectFlashProgFlag = TRUE;
CreateIntermediateSRecordFile;
}
else
{
fprintf(stderr, "Unknown parameter: %s", argv[i]);
}
}
return 0;
}
答案 0 :(得分:1)
命令行上的每个参数都作为单独的argv
条目传入。假设我已经理解了你的参数应该是什么意思,我希望你的代码看起来更像这样:
if(0 == stricmp("Interrogator", argv[i]))
InterrogatorProtocol1553Flag = TRUE;
else if(0 == stricmp("MLV_PLV_179", argv[i]))
Interrogator_OFP_Select = INT_OFP_DMV_179;
else if(0 == stricmp("MLV_PLV_183", argv[i]))
Interrogator_OFP_Select = INT_OFP_DMV_183;
else if(0 == stricmp("DirectFlash", argv[i]))
DirectFlashProgFlag = TRUE;
...
在开始循环之前,您将使用默认值初始化这些变量,这些默认值在未设置各种参数时使用。
如果您的某个参数是文件名,那么您需要某种方式来指示它是哪一个。一个简单的选择是使其成为命令行的最后一个值。所以你会得到这样的文件名:
filename = argv[argc-1];
在这种情况下,读取所有其他参数的循环应该只会达到argc-1
,否则文件名将被解释为无法识别的参数,您将收到错误。
答案 1 :(得分:0)
你的问题不明确。
如果您需要从标准输入(键盘)输入,请使用scanf
。如果您需要从文件输入,请使用fscanf
。它们之间只有一个区别:fscanf
有一个额外的第一个FILE*
参数,它是指向表示文件的结构的指针。您可以像这样获取文件:
FILE* f = fopen("C:/file.txt", "r"); // 'r' means the file is used for reading