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

使用fscanf从文件中读取字符串、整数等

甄阳朔
2023-03-14

我希望你帮助我理解我应该如何做以下事情:

我有一个包含由空格“”分隔的整数的文件。我需要读取所有整数,对它们进行排序,并将它们作为字符串写入另一个文件。我写了一个代码,但是我一个字符一个字符地读,把这个单词放在一个字符子数组[Max_Int]中,当我遇到“”时,我把这些字符,现在是一个字符串,在原子化后放到另一个主Int数组中,直到到达文件的末尾,一个字符串接一个字符串,然后我对它们进行排序并将它们写到另一个文件中。

但后来我想起了有一个fscanf函数:我读过它,但仍然不完全理解它做什么以及如何使用它。

在我的例子中,如果所有整数都用空格分隔,我可以写fscanf(myFile,“%s”,word)?它是否知道不考虑“并”在特定字符串的末尾停止?!怎样

更重要的是,我可以写fscanf(myFile,"%d",数字),它会给我下一个数字本身?(我一定是误会了。感觉像魔法)。

共有3个答案

涂选
2023-03-14

试试这个:

#include <stdio.h>


int main(int argc, char* argv[])
{
    char name[256];
    int age;
    /* create a text file */
    FILE *f = fopen("test.txt", "w");
    fprintf(f, "Josh 25 years old\n");
    fclose(f);

    /* now open it and read it */
    f = fopen("test.txt", "r");

    if (fscanf(f, "%s %d", name, &age) !=2)
        ; /* Couln't read name and age */
    printf("Name: %s, Age %d\n", name, age);

}
佴英奕
2023-03-14

以下几行将完成您的工作,以下几行将读取单个整数。

int number;
fscanf(myFile, " %d", &number);

把它放在一个循环中,直到文件结束,并把数字放在数组中。

尚嘉勋
2023-03-14

你是对的,fscanf可以给你下一个整数。但是,您需要为它提供一个指针。因此,您需要一个

fscanf(myFile, "%d", &number);

*scanf系列函数也会自动跳过空白(除非给定了%c%[%n)。

您读取文件的循环最终将如下所示:

while (you_have_space_in_your_array_or_whatever)
{
    int number;
    if (fscanf(myFile, "%d", &number) != 1)
        break;        // file finished or there was an error
    add_to_your_array(number);
}

附带说明:你可能会想到这样写:

while (!feof(myFile))
{
    int number;
    fscanf(myFile, "%d", &number);
    add_to_your_array(number);
}

这虽然看起来不错,但有一个问题。如果您确实到达了文件的结尾,那么在测试文件结尾之前,您已经读取了一个垃圾编号并将其添加到数据中。这就是为什么您应该使用我首先提到的while循环。

 类似资料:
  • 我在开始一个分配给我的项目时遇到了一点困难。我不能使用字符串运算符、等。我需要将文件扫描到EOF。 以下是该文件的一个示例: 我试图做的是设置一个while循环: 然后尝试检查cur_gate字符串是什么: 问题是,我不知道读完字符串后我将如何扫描3个整数。然后最终,一旦它读取特殊,我需要扫描4个整数。 我想将第一个整数存储在一个名为输出的数组中,其余的存储在一个名为输入的数组中。 总之,我应该如

  • 我的任务是从txt文件中获取输入,并将其读入结构数组的一部分,然后对其进行操作,但我在读取该文件时遇到了问题。 我的结构如下: 在我的主要观点中:我定义最大值为100 下面是我们要读取的txt文件: 所以我在fscanf的准确性方面遇到了一些问题。要检查worker包含的内容,我使用了printf(“%s”,worker[0]。first)和printf(“%c”,worker[0]。initia

  • 正如标题所说,我想知道在Java中是否有使用数组格式化字符串的简便方法。 让我举一个kotlin的例子。 以上代码运行良好。那么Java呢? 对不起,我没有清楚地描述我的问题。当我遇到我的真实案例时,我发现我的代码现在无法工作。 事实上,模板是从文件中读取的。 和模板。txt文件包含: 如您所见,我想读取文件,然后格式化结果。 另外,对于这个问题我很抱歉。因为它似乎被更改为如何格式化从文件中读取的

  • 我需要在android中以字符串的形式加载一个xml文件,以便将其加载到TBXML xml解析器库并对其进行解析。我现在必须以字符串形式读取文件的实现需要大约2秒,即使对于一些KBs的非常小的xml文件也是如此。在Java/Android中,有没有已知的快速方法可以将文件读取为字符串? 这是我现在拥有的代码:

  • 《 cin.getline()》一节中,详细介绍了如何使用 getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。 我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstrea

  • 我很难理解为什么这段代码返回一个Object[]而不是int[]("line"是我从一个看起来像"1 2 3 4 5"的文件中读取的字符串)。 我希望你能帮我理解,谢谢!