在C中读取不同数量的参数

在C中读取不同数量的参数,c,parameters,logic,scanf,C,Parameters,Logic,Scanf,输入将如下所示: AND 1 0 2 OR 3 1 4 XOR 5 1 3 ENEE140 10 7 8 9 NOT 6 11 其中每行中的第一个参数是逻辑运算符,后面的数字是门。我想知道读取这些参数的最佳方式是什么,因为我不能只scanf(“%s%d%d%d”),因为有些运算符(ENEE140)有3个以上的整数参数(它有4个)。将空格替换为null。然后,这些可以看作是单独的字符串。 类似于(假设输入行称为char*input): #包括 #包括 int main() { 字符输入[100

输入将如下所示:

AND 1 0 2
OR 3 1 4
XOR 5 1 3
ENEE140 10 7 8 9
NOT 6 11 

其中每行中的第一个参数是逻辑运算符,后面的数字是门。我想知道读取这些参数的最佳方式是什么,因为我不能只
scanf(“%s%d%d%d”)
,因为有些运算符(ENEE140)有3个以上的整数参数(它有4个)。

将空格替换为null。然后,这些可以看作是单独的字符串。 类似于(假设输入行称为char*input):

#包括
#包括
int main()
{
字符输入[1000];
printf(“输入行,或完成后按return\n”);
对于(;;)
{
fgets(输入,999,标准输入);
如果(*输入=='\n')
打破
char*begin=输入;
字符*结束=输入;
//记住字符串的起点和终点
而(*结束)+结束;
//将空格替换为空
对于(;*begin;++begin){
如果(*开始=“”){
*开始=0;
}
}
//现在分析每个字符串
用于(开始=输入;开始<结束;++开始){
如果(开始==输入){
printf(“命令:%s\n”,开始);
}否则{
int值=atoi(开始);
printf(“值:%d\n”,值);
}
while(*开始){
++begin;//跳到null
}
}        
}
}

将空格替换为null。然后,这些可以看作是单独的字符串。 类似于(假设输入行称为char*input):

#包括
#包括
int main()
{
字符输入[1000];
printf(“输入行,或完成后按return\n”);
对于(;;)
{
fgets(输入,999,标准输入);
如果(*输入=='\n')
打破
char*begin=输入;
字符*结束=输入;
//记住字符串的起点和终点
而(*结束)+结束;
//将空格替换为空
对于(;*begin;++begin){
如果(*开始=“”){
*开始=0;
}
}
//现在分析每个字符串
用于(开始=输入;开始<结束;++开始){
如果(开始==输入){
printf(“命令:%s\n”,开始);
}否则{
int值=atoi(开始);
printf(“值:%d\n”,值);
}
while(*开始){
++begin;//跳到null
}
}        
}
}

将整行读取为字符串,然后从中读取操作码和操作数(这是一个简单的解析案例)。查看用于拆分字符串的
strtok*
函数。您可以使用基于第一个字符的
开关格和3个不同的
scanf
调用扫描2、3或4个数字。我忘了提到,我们的教授不允许我们使用string.h库中的任何内容,因为这是一个介绍类,他不希望我们中的任何人有任何“优势”。不过,切换案例听起来是可行的,所以我将尝试一下。非常感谢!您仍然应该使用字符串解析方法。编写这些字符串操作是学习编程的一个很好的方法。将整行作为字符串读取,然后从中读取操作码和操作数(这是一个简单的解析示例)。查看strtok*
函数以分割字符串。您可以使用基于第一个字符的
开关盒和3个不同的
scanf
调用扫描2、3或4个数字谢谢。我忘了提到,我们的教授不允许我们使用string.h库中的任何内容,因为这是一个介绍类,他不希望我们中的任何人有任何“优势”。不过,切换案例听起来是可行的,所以我将尝试一下。非常感谢!您仍然应该使用字符串解析方法。编写这些字符串操作是学习编程的一个很好的方法。
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        char input[1000];
        printf("Enter line, or press return when finished\n");
        for(;;)
        {
            fgets(input, 999, stdin);
            if (*input == '\n')
                break;
            char *begin = input;
            char *end = input;
            // remember string begin and end points
            while (*end) ++end;
            // replace spaces with null
            for (;*begin;++begin) {
                if (*begin == ' ')  {
                    *begin = 0; 
                }
            }
            // Now parse each string

            for (begin = input; begin < end; ++begin) {
                if (begin == input)  {
                    printf("Command: %s\n", begin);
                } else {
                    int value = atoi(begin);
                    printf("Value: %d\n", value);
                }
                while (*begin)  {
                    ++begin; // skip to null
                }
            }        
        }
    }