我正在尝试通过包含随机内容的文本文件循环。它的当前内容是:
"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
将标记化的字符串转换为数字。