当前位置: 首页 > 知识库问答 >
问题:

使用fscanf读取字符串,然后将可变数量的整数读取到EOF

云光明
2023-03-14

我在开始一个分配给我的项目时遇到了一点困难。我不能使用字符串运算符、fgets等。我需要将文件扫描到EOF。

以下是该文件的一个示例:

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

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

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

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

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

问题是,我不知道读完字符串后我将如何扫描3个整数。然后最终,一旦它读取特殊,我需要扫描4个整数。

我想将第一个整数存储在一个名为输出的数组中,其余的存储在一个名为输入的数组中。

总之,我应该如何根据我读取的字符串,先fscanf一个字符串,然后fscanf一个可变数量的整数?

共有1个答案

霍弘厚
2023-03-14

根据我对您的问题的理解,下面的代码将对您有所帮助。

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

#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\n",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("\n");
    printf("OUTPUT: ");
    for(j=0; j<o; j++)
    {
        printf("%d\t",out[j]);
    }
    printf("\n");
    return(0);
}

您给出的文件示例的输出

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

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

 类似资料:
  • 我希望你帮助我理解我应该如何做以下事情: 我有一个包含由空格“”分隔的整数的文件。我需要读取所有整数,对它们进行排序,并将它们作为字符串写入另一个文件。我写了一个代码,但是我一个字符一个字符地读,把这个单词放在一个字符子数组[Max_Int]中,当我遇到“”时,我把这些字符,现在是一个字符串,在原子化后放到另一个主Int数组中,直到到达文件的末尾,一个字符串接一个字符串,然后我对它们进行排序并将它

  • 可能重复: 如何在Java中将字符串转换为int? 我的代码应该读取字符串,然后采取相应的操作,但如果字符串是一行数字,我需要这一行作为一个完整的数字(一个int)而不是作为一个字符串,这可以做到吗?

  • 对于我正在学习的一门在线课程,我正在尝试保存我定义为变量的第二组整数、双倍和字符串,在使用扫描器读取它们(第二组)之后。问题是我不知道如何处理我定义的第二组变量。我尝试将它们实例化为一个新变量,但我总是遇到错误。我需要帮助读取每个变量,然后保存它们。

  • 问题内容: 我正在使用Apache POI读取Excel文件。在阅读时,我注意到它将字符串作为浮点值。 如果我的单元格包含1,则它将获取为1.0 我从以前的问题中得到了一些提示,并修改了代码,但float表示仍然保持原样。 如何正确读取字符串和日期的数据? 问题答案: 对评论发表评论 问题是电话 这样做是在要求POI尝试将单元格从当前单元格(例如数字)转换为字符串。尝试执行此转换非常简单,这就是为

  • 今天,我遇到了扫描函数的问题。假设您有一个类似于以下示例的结构。 如果运行以下代码 它会打印出来的 原因是fscanf函数假定a.bVal是一个整数,并覆盖a.nVal的前3个字节。这个问题可以通过下面的脏解来解决。 我的问题是,除了解释的解决方案之外,有没有更干净、更直接的方法来避免这个问题?

  • 问题内容: 我有一个关于代码优化的问题(可以运行,但是太慢了……)。我正在阅读形式的输入 其中Xi,Yi是整数。我用于读取行,然后用于处理这些数字,如下所示: 问题在于,这种方法在处理大型数据集时似乎效率低下。您能否建议我做一些简单的改进(我听说可以使用一些整数分析int或regex)来提高性能?谢谢你的提示 编辑:也许我判断错了,必须在代码的其他地方进行一些改进… 问题答案: (更新的答案) 我