0

我试图让一个程序从 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;
}
4

2 回答 2

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否则文件名将被解释为无法识别的参数,并且您会收到错误消息。

于 2013-07-10T12:59:31.570 回答
0

你的问题不清楚。

如果您需要从标准输入(键盘)输入,请使用scanf. 如果需要从文件输入,请使用fscanf. 它们之间只有一个区别:fscanf有一个额外的第一个FILE*参数,它是指向表示文件的结构的指针。您可以像这样为您的文件获取它:

FILE* f = fopen("C:/file.txt", "r"); // 'r' means the file is used for reading
于 2013-07-10T12:50:36.990 回答