我在使用fscanf
读取文本文件时遇到了小问题。
这是我的一小段C++代码:
struct tooted
{
char nimi[50];
int kogus;
float hind;
}toode[20];
int main()
{
FILE *kala;
kala = fopen("kala.txt", "r");
int i=0, n=0;
char buffer[200];
while(!feof(kala))
{
if(n<1)
{
fgets(buffer, 200, kala);
}
if(n>0)
{
fscanf(kala, "%s[^\t]%i[^\t]%f", toode[i].nimi, toode[i].kogus, toode[i].hind);
i++;
}
n++;
}
for(i=0; i<n-1; i++)
{
printf("Toode: %s\nKogus: %i\n Hind: %f\n\n", toode[i].nimi, toode[i].kogus, toode[i].hind);
}
return 0;
}
fgets(buffer, 200, kala);
是为了从第二行开始使用 fscanf
函数。
在文件 kala.txt
中,我有三行数据,每行用 [tab] 分隔。第一个单词是字符串,第二个是整数,第三个是浮点数,格式如下:
product1 (tab) 4 (tab) 1.4
product2 (tab) 3 (tab) 2.3
它使用仅有的toode[i].nimi
逐个读取单词(和数字),因此结果如下:
Toode: product1
Kogus: 0
Hind: 0.0000
Toode: 4
Kogus: 0
Hind: 0.0000
注意,product1
可能是两个单词,但它们之间用的是空格而不是制表符。我希望它作为一个字符串来读取。
(在问问题之前我试图查找解决方案,但我找不到。如果这是一个重贴,请原谅。)
谢谢 :)
std::string
、std::vector
、iostreams
等等。 - crashmstrfeof(kala)
,而是测试fscanf()
的结果。2)在循环之前使用fgets(buffer, 200, kala);
。 - chux - Reinstate Monicafgets
更好的方法是丢弃整个第一行。 - M.M