关于C#:使用fscanf读取一个字符串,然后将可变数量的整数读取到EOF

Using fscanf to read a string and then a variable number of integers to EOF

我在开始被分配的项目时遇到了一些麻烦。我不能使用字符串运算符,fgets等。我需要将文件扫描到EOF。

这是文件的示例:

1
2
3
AND 3 2 1
OR 4 5 6
SPECIAL 4 5 6 7

我试图做的是设置一个while循环:

1
while (fscanf(circuit,"%s", cur_gate) != EOF){

然后尝试检查cur_gate字符串是什么:

1
if (cur_gate[0] == 'A'){

问题是,我不知道读取字符串后如何扫描3个整数。最终,一旦读取到SPECIAL,我就需要扫描4个整数。

我想将第一个整数存储在名为Output的数组中,并将其余的整数存储在称为INPUT的数组中。

总而言之,我将如何fscanf一个字符串,然后fscanf根据读取的字符串来可变数量的整数?


根据我对您的问题的理解,以下代码将为您提供帮助。

我假设您只是想将所有输出存储在一个数组中,类似地,将所有输入存储在一个数组中。因此,按照您的示例,您想在输出数组中存储3,4,4(单词后的第一个整数)。其余整数需要转到另一个输入数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX_CHAR  256
#define MAX_IN    100
#define MAX_OUT   100

enum
{
    FALSE = 0,
    TRUE
};

int main()
{
    char word[MAX_CHAR];
    FILE *fp;

    int i = 0, in[MAX_IN];
    int o = 0, out[MAX_OUT];

    int flag = FALSE;

    fp = fopen("dict.txt","r");
    if(NULL != fp)
    {
        while(fscanf(fp,"%s", word) != EOF)
        {
            printf("%s\
"
,word);
            if(0 != isalpha(word[0]))
            {
                flag = TRUE;
            }
            else
            {
                if(TRUE == flag)
                {
                    out[o] = atoi(word);
                    o++;
                    flag = FALSE;
                }
                else
                {
                    in[i] = atoi(word);
                    i++;
                }
            }
        }
        fclose(fp);
    }
    int j;
    printf("INPUT:");
    for(j=0; j<i; j++)
    {
        printf("%d\\t",in[j]);
    }
    printf("\
"
);
    printf("OUTPUT:");
    for(j=0; j<o; j++)
    {
        printf("%d\\t",out[j]);
    }
    printf("\
"
);
    return(0);
}

输出给定的文件示例

1
2
INPUT: 2        1       5       6       5       6       7
OUTPUT: 3       4       4

免责声明:该代码已在我的环境中进行编译和测试。我鼓励您自己处理错误处理方案。