C++ 我是否错误地使用了fscanf?
我在读取文本文件时遇到了一个小问题 我有一小段代码(C++): 它只使用C++ 我是否错误地使用了fscanf?,c++,c,text,scanf,C++,C,Text,Scanf,我在读取文本文件时遇到了一个小问题 我有一小段代码(C++): 它只使用toode[i].nimi一个接一个地读取单词(和数字),因此结果是: Toode: product1 Kogus: 0 Hind: 0.0000 Toode: 4 Kogus: 0 Hind: 0.0000 等等 还要注意,product1可以是两个单词,但它们之间用空格分隔,而不是制表符。我希望它将product1作为一个字符串读取 (在询问之前,我尝试查找它,但找不到解决方案。如果是重新发布,则很抱歉。) 谢谢:)
toode[i].nimi一个接一个地读取单词(和数字),因此结果是:
Toode: product1
Kogus: 0
Hind: 0.0000
Toode: 4
Kogus: 0
Hind: 0.0000
等等
还要注意,product1
可以是两个单词,但它们之间用空格分隔,而不是制表符。我希望它将product1
作为一个字符串读取
(在询问之前,我尝试查找它,但找不到解决方案。如果是重新发布,则很抱歉。)
谢谢:)是的。你用错了
所有参数都必须是指针,您为char[]提供了指针,但没有为int和float提供指针
指针是在C中创建out(而不是返回)参数的唯一方法。格式后面的所有参数都是out参数
它应该是:(注意添加的“&”项)
编辑我还修复了格式
fscanf(kala, "%[^\t] %i %f", toode[i].nimi, &toode[i].kogus, &toode[i].hind);
格式字符串中的“[^”
将尝试匹配输入中的文本[^
(可能会失败),因为前面没有%
,所以它不是scanf模式。您可能只需要:
fscanf(kala, " %[^\t]%i%f", toode[i].nimi, &toode[i].kogus, &toode[i].hind);
您还有许多其他问题,例如,没有进行任何错误检查,但这至少应该让您开始。好的,所以我对它进行了一些修补,发现(仍在学习)我从中获取信息的文本文件中不应该有comas。或者至少我应该让fscanf
忽略comas
我还删除了[^\t]
,因为fscanf
会像对待空格一样忽略它们
我现在的代码:
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], *token;
fgets(buffer, 200, kala);
while(!feof(kala))
{
fscanf(kala, "%s %i %f", toode[i].nimi, &toode[i].kogus, &toode[i].hind);
printf("Toode: %s\nKogus: %i\n Hind: %2.2f\n\n", toode[i].nimi, toode[i].kogus, toode[i].hind);
i++;
}
return 0;
}
我现在的输出:
Toode: product1
Kogus: 1
Hind: 1.5
Toode: product2
Kogus: 2
Hind: 2.6
等
正如我所希望的那样
我知道我仍然没有错误检查,但这不是我试图修复的错误,至少现在还没有。
很抱歉,没有指定我的文本文件,因为它会帮助您发现问题。我不知道如何在那里查找问题:)
我研究了如何正确使用feof,你是对的,我可以做得更好,以消除未来的bug。感谢大家的提醒(不确定是否正确使用此表达式:p)。现在我只是没有时间修复它
“谢谢”,“谢谢”,“< /p> >代码> int())/Cuth>是整个问题中唯一的C++。如果你要写C++,你应该写C++。换句话说,<代码> STD::String ,代码> STD::矢量< /代码>,代码> IoSturis,等等。注意:1)错误使用<代码> FEF(KARA)。
result。2)使用fgets(缓冲区,200,卡拉)
在循环之前。甚至比这更好的是先放弃整个循环line@crasstr我相信您可以选择以自己的风格编写代码。感谢您的澄清!修复了我的代码。但它仍然没有解决主要问题。仍然没有将数据扫描到“&toode[I].kogus”和“&toode[I].hind.您还应该测试fscanf的结果,以控制实际读取的参数数量。我找到了一个解决方案和主要问题。在文本文件中我有comas。这是一个很大的错误。感谢大家的帮助:)我会尽快发布较长的答案(因为我的声誉还不到10,所以不能再发布8小时)
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], *token;
fgets(buffer, 200, kala);
while(!feof(kala))
{
fscanf(kala, "%s %i %f", toode[i].nimi, &toode[i].kogus, &toode[i].hind);
printf("Toode: %s\nKogus: %i\n Hind: %2.2f\n\n", toode[i].nimi, toode[i].kogus, toode[i].hind);
i++;
}
return 0;
}
Toode: product1
Kogus: 1
Hind: 1.5
Toode: product2
Kogus: 2
Hind: 2.6