gpt4 book ai didi

计算文本文件 C 中的帐户数量

转载 作者:行者123 更新时间:2023-11-30 15:32:42 24 4
gpt4 key购买 nike

我想计算文本文件中的帐户数量,但由于某种原因,我总是得到错误的帐户数量。

文本文件中的帐户结构如下:

accountName
accountPassword
accountNickname
accountId(this is just the position of the account in the file)
accountType
if the account type is 1 (as opposed to 2) there is also:
0
0
0
0
0

因此,包含一些帐户的文本文件示例可能如下所示:

bob1
password1
bobby
1
1
0
0
0
0
0
tony1
password1
tony
2
2
mary1
password1
mary
3
2
dave1
password1
dave
4
1
0
0
0
0
0

这是我的代码,用于查找文本文件中有多少个帐户:

userId = 0;
while(!feof(fp))
{
fgets(dump,100, fp);
fgets(dump,100, fp);
fgets(dump,100, fp);
fgets(dump,100, fp);
fscanf(fp,"%i",&tmpAccType); // fifth line from start of account is always account type
if (tmpAccType == 1) // if the user type is an registered user we must skip more variable lines
{
fgets(dump,100, fp);
fgets(dump,100, fp);
fgets(dump,100, fp);
fgets(dump,100, fp);
fgets(dump,100, fp);
}

userId++; //add one to the account position
}

fclose(fp);

出于某种原因,在添加 3-5 个帐户后,程序将开始返回错误的帐户数量。如果有人可以帮助我,我将不胜感激:D

最佳答案

您在使用fscanf时没有阅读最后的 EOL,因此存在转变,您的算法不起作用。

我更喜欢使用fgets,然后扫描已读取的字符串 - 至少文件指针是准确的,因为整行(除非超过 100 个字符)已被读取。

替换

fscanf(fp,"%i",&tmpAccType);

fgets(dump, 100, fp);
sscanf(dump,"%i",&tmpAccType);

然后在循环开始处

while(!feof(fp)) {

feof 不会返回 1,因为尚未读取下一行(空)。
(参见this other answer)
您可以将该行替换为

while(fgets(dump, 100, fp)) {

并删除下一个fgets(dump, 100, fp),因为while已经读取了一个。

也就是说,程序依赖于完美的输入文件 - 您还可以检查程序中各处的fgets返回值(应该不是NULL)(< em>while在开始时执行一次),如果其中一个错误NULL,则退出(出现错误)。

关于计算文本文件 C 中的帐户数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com