4

我希望您能帮助我了解我应该如何执行以下操作:

我有一个文件,其中包含由空格“”分隔的整数。我需要读取所有整数,对它们进行排序并将它们作为字符串写入另一个文件。我写了一个代码,但是我逐个字符地读取字符,把这个词放在一个 char sub_arr [Max_Int] 中,当我遇到''时,我把这些字符,现在是一个字符串,在将它放入另一个 Main int 数组之后,直到逐个字符串地到达文件末尾,然后我对它们进行排序和 itoa-ing 并将它们写入另一个文件。

但后来我记得有一个fscanf 函数:我读过它,但我仍然不完全了解它的作用以及如何使用它。

就我而言,所有整数都用空格分隔,我可以写fscanf(myFile,"%s",word)吗?它会知道不考虑 ' ' 并在特定字符串的末尾停止吗?!如何?

不仅如此,我可以写fscanf(myFile,"%d",number),它会给我下一个数字本身吗?(我一定是误会了。感觉​​像魔术)。

4

3 回答 3

6

你是对的,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我首先提到的循环。

于 2012-07-18T14:27:57.117 回答
2

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

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

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

于 2012-07-18T14:20:21.397 回答
2

尝试这个:

#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);

}
于 2012-07-18T14:25:52.957 回答