结构数组里面的strstr字符数组 [英] strstr char array inside struct array
问题描述
我定义为一个结构;
结构播放器{ INT没有,年龄; 焦炭名[20];}玩家[10];
阵列从文件填满。我尝试做的是,以来自用户的输入,添加输入字符数组,将其发送至搜索(字符查找[])功能和的strstr
名称字段中的一个循环。
编辑:对不起,我纠正了订单。我想在一个循环中的strstr。
的char * p =的strstr(玩家[X] .name和inputFromUser);
但 P
总是空。我怎样才能做到这一点?
在此先感谢。
编辑 - $ C $下加入...
的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&unistd.h中GT;
#包括LT&;&string.h中GT;结构播放器{ INT没有,年龄; 焦炭名[20];}玩家[20];无效fillstruct(字符*);
无效搜索(的char []);INT主(INT ARGC,CHAR *的argv [])
{
INT ARG;
INT℃;
INT D组;
INT I = 0; 所以char a [100];
字符*文件名= NULL; 而((ARG = getopt的(ARGC,ARGV,F:))= - 1)
{
开关(ARG)
{
案例'F':
文件名= OPTARG;
fillstruct(文件名);
打破;
默认:
打破;
}
}
而((C =龟etc(标准输入))!= EOF)
{
如果(C!= 10)
{
一个由[i] = C;
我++;
}
其他
{
一个由[i] ='\\ 0';
搜索(一);
I = 0;
}
}
返回0;
}无效搜索(一个烧焦[])
{
INT I = 0;
INT关口;
INT发现= 0;
的char * p = NULL;
而((I小于20)及及(发现== 0))
{
P =的strstr(一,玩家[I]。名称);
如果(p)的
{
COL = P-A;
的printf(\\ nPlayer%s于%s的..找到索引中找到:%d个,一个玩家[I] .name和COL);
找到= 1;
}
其他
{
的printf(\\ NP =%个=%s的播放器[%D]。。名称=%S,P,A,I,玩家[我]。名称);
}
我++;
}
}无效fillstruct(字符*姓名)
{
FILE * FP;
焦线[100];
INT I = 0; FP = FOPEN(姓名,R);
如果(FP == NULL)
{
出口(1);
} 而(与fgets(行,100,FP)!= NULL)
{
玩家[I]。无= I;
的strcpy(玩家[I] .name和线);
([I]。名称标准输出,\\ nplayer =%S中,玩家)fprintf中;
玩家[I]。年龄= 20;
我++;
}
FCLOSE(FP);
}
与fgets
存储 \\ n
,然后停止服用输入。
因此,假设一个球员的名字是用户
,玩家[我]。名称
将等于用户\\ n
,而 A
是用户
。
于是返回的strstr
总是 NULL
。
试试这个:
P =的strstr(玩家[I] .name和一个);
OR,删除 \\ n
通过从文件输入后与fgets
:
而(与fgets(行,100,FP)!= NULL)
{
玩家[I]。无= I;
的strcpy(玩家[I] .name和线);
玩家[我]。名称[strlen的(球员[我]。名称)-1] ='\\ 0'; //添加此行
([I]。名称标准输出,\\ nplayer =%S中,玩家)fprintf中;
玩家[I]。年龄= 20;
我++;
}
I have a struct defined as;
struct player {
int no, age;
char name[20];
} players[10];
Array is filled from file. What I try to do is, take input from user, add input to char array, send it to search(char lookup[]) function and strstr
name field in a loop.
EDİT: Sorry I corrected the order. I'm trying to strstr in a loop.
char *p = strstr(players[x].name, inputFromUser);
but p
is always null. How can I do this?
Thanks in advance.
EDIT - Code Added...
#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);
}
fgets
stores the \n
and then stops taking input.
So suppose a player name is "user"
, players[i].name
will be equal to "user\n"
while a
is "user"
.
So return of strstr
is always NULL
.
Try this instead:
p = strstr(players[i].name,a);
OR, remove the \n
after taking input from file by fgets
:
while(fgets(line, 100, fp)!=NULL)
{
players[i].no=i;
strcpy(players[i].name, line);
players[i].name[strlen(players[i].name)-1]='\0'; //add this line
fprintf(stdout, "\nplayer=%s", players[i].name);
players[i].age=20;
i++;
}
这篇关于结构数组里面的strstr字符数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!