【问题标题】:Reading in different numbers of parameters in C在 C 中读取不同数量的参数
【发布时间】:2015-11-12 18:14:09
【问题描述】:

输入看起来像这样:

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 个)。

【问题讨论】:

  • 将整行读取为字符串,然后从中读取操作码和操作数(这是一个简单的解析案例)。
  • 查看strtok* 函数来拆分字符串。
  • 你可以有一个基于第一个字符的 switch case 和 3 个不同的 scanf 呼叫扫描 2 个或 3 个或 4 个数字
  • 谢谢大家。我忘了提到我们的教授不会让我们在 string.h 库中使用任何东西,因为这是一个介绍类,他不希望我们中的任何人拥有任何“优势”。开关盒听起来可行,所以我会尝试一下。非常感谢!
  • 你还是应该使用字符串解析的方法。编写这些字符串操作是学习编程的好方法。

标签: c parameters logic scanf


【解决方案1】:

用空替换空格。那么这些可以被认为是单独的字符串。 类似的东西(假设输入行称为 char * 输入):

    #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
                }
            }        
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多