我试图逐行读取文件,并采用两个单独的字符串,并将它们分配给两个不同的变量。前后会有空白的空白空间。
我得到一个像这样的文件:
EXAMPLE.TXT
===========
company value\n
company value \n
company value \n
<company>
之前或<value>
之后可以有任何类型的空格字符,但两者之间始终始终只有一个空格。我试图将这些<company>
和<values>
放入一个哈希表中。这就是我现在正在做的事情。hashtable_t * accounts = create_hashtable(lines);
//Inserting into hashtable
while(fscanf(fd, " <%79[^>]> <%lf%*[^\n]", company, &balance) == 2) {
if(set(accounts, company, balance) == 0) {
continue;
} else {
return NULL;
}
}
fclose(fd);
return accounts;
我认为我的问题出在while循环的参数中。它返回-1,所以我认为这不是有效的参数。
最佳答案
当到达文件末尾或发生读取错误时,fscanf
返回EOF。
由于您的情况是返回-1,因此建议您查看ferror
:
int err = ferror(fd);
fprintf(stderr, "err %d: %s\n", err, strerror(err));
我对scanf的测试表明它有效:
#include <stdio.h>
int main(void) {
FILE *fp = fopen("test.txt", "r");
char line[256];
int lines = 0;
while (fgets(line, sizeof line, fp) != NULL)
++lines;
printf("total lines: %d\n", lines);
fseek(fp, 0, SEEK_SET);
double balance;
char company[128] = {'\0'};
int ret;
while ((ret = fscanf(fp, " <%[^>]> <%lf>", company, &balance)) == 2) {
printf("%s: %lf\n", company, balance);
}
if (!feof(fp)) {
fprintf(stderr, "error %d\n", ferror(fp));
}
return 0;
}
测试文件:
<Company> <33.44>
<cOmpany> <34.44>
<coMpany> <35.44>
<comPany> <36.44>
输出:
total lines: 4
Company: 33.440000
cOmpany: 34.440000
coMpany: 35.440000
comPany: 36.440000
关于c - C-逐行读取文件,忽略以某种格式分配值的前导和尾随空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36684067/