我正在尝试遍历包含随机内容的文本文件。目前的内容是:
"13 -35 57 - 23723724
12taste-34the+56rain-bow845"
我的程序应该只从文件中获取数字(-35
作为负数,但由于中间的空格而不是- 23723724
)并且没有与整数无关的字母或其他字符。< / p>
目前我的代码有一个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;
答案 0 :(得分:1)
当输入流遇到-
并且它希望看到一个整数时,它不会读取任何内容。它停在那里。
如果你想继续阅读其余的数字,你需要一些代码来读取下一个字符,丢弃它,然后继续。
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);
答案 1 :(得分:0)
-
在找到与其图案匹配的内容之前不会继续查看其输入。在这种情况下,它遇到单独的# sample message shown in the celery docs
{"id": "4cc7438e-afd4-4f8f-a2f3-f46567e7ca77",
"task": "celery.task.PingTask",
"args": [],
"kwargs": {},
"retries": 0,
"eta": "2009-11-17T12:30:56.527191"}
,并且无法将其解析为整数,返回零。这打破了你的循环。你需要使用EOF来打破你的循环。
答案 2 :(得分:0)