【发布时间】:2014-05-12 06:44:27
【问题描述】:
我有一个结构定义为;
struct player {
int no, age;
char name[20];
} players[10];
数组是从文件中填充的。我尝试做的是,从用户那里获取输入,将输入添加到 char 数组,将其发送到 search(char lookup[]) 函数和循环中的strstr name 字段。
编辑:抱歉,我更正了订单。我正在尝试 strstr 循环。
char *p = strstr(players[x].name, inputFromUser);
但p 始终为空。我该怎么做?
提前致谢。
编辑 - 添加代码...
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
struct player {
int no, age;
char name[20];
} players[20];
void fillstruct(char *);
void search(char []);
int main(int argc, char *argv[])
{
int arg;
int c;
int d;
int i=0;
char a[100];
char *filename = NULL;
while((arg=getopt(argc, argv, "f:"))!=-1)
{
switch(arg)
{
case 'f':
filename = optarg;
fillstruct(filename);
break;
default:
break;
}
}
while((c=fgetc(stdin))!=EOF)
{
if(c!=10)
{
a[i]=c;
i++;
}
else
{
a[i]='\0';
search(a);
i=0;
}
}
return 0;
}
void search(char a[])
{
int i=0;
int col;
int found=0;
char *p =NULL;
while((i<20)&&(found==0))
{
p = strstr(a, players[i].name);
if(p)
{
col = p-a;
printf("\nPlayer '%s' found in '%s'.. Found index: %d", a, players[i].name, col);
found=1;
}
else
{
printf("\np=%s a=%s player[%d].name=%s", p, a, i, players[i].name);
}
i++;
}
}
void fillstruct(char *name)
{
FILE *fp;
char line[100];
int i=0;
fp = fopen(name, "r");
if(fp==NULL)
{
exit(1);
}
while(fgets(line, 100, fp)!=NULL)
{
players[i].no=i;
strcpy(players[i].name, line);
fprintf(stdout, "\nplayer=%s", players[i].name);
players[i].age=20;
i++;
}
fclose(fp);
}
【问题讨论】:
-
你测试的
inputFromUser和{players[x].name}的值是多少? -
为什么
players[x].name周围有大括号? -
假设您尝试使用用户的输入搜索玩家姓名,您的 strstr 参数的顺序相反,还要注意 strstr 区分大小写。
-
@imbtfab:我认为您可以将其写为答案——即使问题太不精确而无法实际验证。
-
据我所知,
strstr将第二个字符串附加到第一个字符串,它不返回值
标签: c arrays struct char strstr