C 读取文本文件并搜索文本

C 读取文本文件并搜索文本,c,C,阅读文本文件中的材料后,如果通过搜索有相应的名称,则打印出名称和货币。但是,我只能读取文本文件的第一行。如果我想让它读另一行并找到相应的名称,我能做什么 我的文本文件有15行 Jane 50 Bruno 100 Kim 200 Young 150 Will 250 Jane 50 Bruno 100 Kim 200 Young 150 Will 250 Jane 50 Bruno 100 Kim 335 Young 455 Will 555 #包括 #包括 #包括 类型定义结构用户{ 字符名[

阅读文本文件中的材料后,如果通过搜索有相应的名称,则打印出名称和货币。但是,我只能读取文本文件的第一行。如果我想让它读另一行并找到相应的名称,我能做什么

我的文本文件有15行

Jane 50
Bruno 100
Kim 200
Young 150
Will 250
Jane 50
Bruno 100
Kim 200
Young 150
Will 250
Jane 50
Bruno 100
Kim 335
Young 455
Will 555
#包括
#包括
#包括
类型定义结构用户{
字符名[10];
国际货币;
}用户信息;
int main()
{
用户信息myvar[100];
int x=0;
char find_name[100];
int i=0;
int-idx=0;
字符缓冲区[1001],*令牌;
char*ptr;
用户信息*用户信息;
int cents_50=0;
整数分20=0;
整数分10=0;
int cents_5=0;
FILE*srcFile=fopen(“coins.txt”、“r”);
如果(srcFile==NULL)
{
printf(“无法打开文件”);
返回-1;
}
//从coins.txt读取的文件
而(!feof(srcFile))
{
i=0;
fgets(缓冲区,1001,src文件);
令牌=strtok(缓冲区“”);
while(令牌!=NULL)
{
如果(i==0)
{
strcpy(myvar[idx].name,token);;
}
else如果(i==1)
{
myvar[idx].money=atoi(令牌);
}
i++;
令牌=strtok(空,“”);
}
idx++;
}
for(int i=0;i name,myvar->money);
printf(“更改:\n”);
//计算50美分;
如果(myvar->money>50)
{
myvar->money/50;
仙_50++;
printf(“50美分:%d\n”,50美分);
}
//计算20美分;
如果((myvar->money/50)money>=20)
{
如果((myvar->货币%50/20)>=1)
{
(myvar->货币%50/20);
仙è20++;
printf(“20美分:%d\n”,20美分);
}
}
//计算10个百分点;
如果((myvar->货币%50%20/10)货币>=10)
{
如果((myvar->货币%50%20/10)>=1)
{
(myvar->货币%50%20/10);
美分10++;
printf(“10美分:%d\n”,10美分);
}
}
如果((myvar->货币%50%20%10/5)货币>=5)
{
如果((myvar->货币%50%20%10/5)>=1)
{
(myvar->货币%50%20%10/5);
仙_5++;
printf(“5美分:%d\n”,5美分);
}
}
}
else if(ptr!=myvar->name)
{
printf(“未成立”);
}
}
else如果(x==2)
打破
}
返回(0);
}
''

这似乎是错误的:

        for(i=0; i<idx; i++)
        {
            ptr = strstr(myvar->name, find_name);
        }
(顺便说一句-您真的想使用
strstr
?我希望使用
strcmp
进行字符串比较)

上述代码后面的所有代码都存在相同的问题,即缺少数组索引


顺便说一句:你读取文件的方式不是100%正确的。参见

你从哪里获得作业或练习?作业或练习的全文是什么?它是否真的告诉你,你只允许阅读文件中的一行?你的问题“我应该怎么做?”的答案是“询问该助手的作者,你是否真的只能阅读第一行,然后期望打印来自可能不同行的信息。”因为这里至少有两个用户认为这是不可能的。首先,请参见请将作业(您可能希望将其格式化为报价,请参见)与您在此处提出的问题清楚地分开。“我只能读取文本文件的第一行。”作为分配的一部分,仍然可能被误读……循环控制应该是
while(fgets(buffer,sizeof buffer,srcFile)!=NULL)
注意,我还删除了缓冲区大小的硬编码重复。然后打印读取的每一行,否则您无法知道它“只读取第一行”,除非您部署了调试器。
        for(i=0; i<idx; i++)
        {
            ptr = strstr(myvar->name, find_name);
        }
        for(i=0; i<idx; i++)
        {
            ptr = strstr(myvar[i].name, find_name);
            if (ptr != NULL) break;
        }