fscanf保存整数会导致无限循环

时间:2014-02-26 00:33:01

标签: integer whitespace scanf infinite

我将.txt文件的以下内容中的整数保存到数组中:

“15,12,10,19,22,2,20,17,5,2,20,25,12,10,23”

我需要做的是忽略空格和逗号,并将数字保存到数组中。简单吧?不是真的,因为空白是偶然的。

/* Here is my current code */
multiuseIndexPosition = 0;
while (fscanf(messageFilePointer, " %d,", &toBePushed) != EOF) {
    messageNumbersArray[multiuseIndexPosition] = toBePushed;
    multiuseIndexPosition++;
    printf("%d\n", toBePushed);
}

不幸的是,这导致无限循环只保存第一个数字,15。如何从.txt文件中保存整数?我尝试了使用%* [^]的各种方法但没有成功。

如果参数为“%d”并且.txt文件中没有空格,则此代码可以正常工作。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是由于您在使用fscanf()时指定的格式。根据fscanf()的文档,可以通过在任何终端窗口输入 man fscanf 找到,你很可能遇到匹配的错误,在这种情况下fscanf()返回的值为零,因为“虽然有可用的输入,但没有分配转换”。

对于数组中的所有数字都是15,可以很容易地解释。由于fscanf()在你的while循环的第一次迭代中成功,因此15被保存到& toBePushed 指示的地址。由于while循环的所有其他迭代都是由于格式不正确而导致fscanf()失败的实例,因此 toBePushed 会在while循环的第一次迭代期间保持为其分配的相同值。 / p>

看起来你在这里可能需要的不是fscanf(),而是其他东西,比如函数fgets()或gets()。使用其中一个将使您能够从文本文件中读取一行并以字符串的形式存储该行。然后,您可以通过将该字符串分解为空终止的较小字符串来解析该字符串,然后可以使用strtol()的string.h库函数将其转换为所需的整数。

相关问题