C语言 While循环在文本文件中意外停止



我正在尝试通过包含随机内容的文本文件循环。它的当前内容是:

"13 -35 57 - 23723724 
12taste-34the+56rain-bow845"

我的程序应该只从文件中获取数字(-35是一个负数,但- 23723724由于中间有空格而不是),并且没有与整数无关的字母或其他字符。

目前我的代码有一个while循环,它运行整个文件并获取所有的十进制值。然而,由于某些未知的原因,它在57之后停止(总结果是:"13-3557"然后停止)。

我试图分别遍历每个字符,但这带来了它自己的一组问题,这个方法至少返回整数。

下面是我的代码:
int *getIntegers(char *filename, int *pn) {
    // Create a dynamic array
    int len = 100;
    int *numbers = malloc(sizeof(int) * len);
    // Source file
    FILE *file;
    file = fopen(filename, "r");
    int i = 0, number = 0;
    while(fscanf(file, "%d", &number) > 0) {
        numbers[i++] = number;
        printf("%d", number);
    }
    return numbers;
}
编辑:

我已经改变了我的代码,它现在检索所有的数字,但没有空格。

// Create a dynamic array
int len = 100;
int *numbers = malloc(sizeof(int) * len);
// Source file
FILE *file;
file = fopen(filename, "r");
int i = 0, number = 0;
while(!feof(file)) {
    if(fscanf(file, "%d ", &number) > 0) {
        numbers[i++] = number;
    } else {
        clearerr(file);
        fgetc(file);
    }
}
fclose(file);
return numbers;

当输入流遇到-时,它期望看到一个整数,它不读取任何内容。到此为止。

如果你想继续读取剩下的数字,你需要一些代码来读取下一个字符,丢弃它,然后继续。

while(!foeof(file) )
{
    if ( fscanf(file, "%d", &number) > 0) {
       numbers[i++] = number;
       printf("%d", number);
    else {
       clearerr(file); // Clear the error state.
       fgetc(file);    // Read the next character and discard it.
    }
}

要在输出的数字之间添加空格,使用:

       printf("%d ", number);

fscanf不继续查看它的输入,直到它找到匹配它的模式。在这种情况下,它遇到单独的-,并且无法将其解析为整数,因此返回0。这会打破你的循环。您将需要使用EOF来中断循环。

这是因为fscanf看到孤独的'-',因为这不是一个有效的数字,它不能解析它并返回0,这导致循环结束。

我建议您使用fgets读取整行,然后使用strtok在空格上分隔,并使用strtol将标记化的字符串转换为数字。

相关内容

  • 没有找到相关文章

最新更新