Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构问题:我如何找到有多少学生有相同的名字(在C程序中)?_C - Fatal编程技术网

结构问题:我如何找到有多少学生有相同的名字(在C程序中)?

结构问题:我如何找到有多少学生有相同的名字(在C程序中)?,c,C,这个代码有什么问题? 我如何找到有多少学生有相同的名字 我如何找出所有 名称拼写相同(重复)(无法使用内置函数) 输入: Enter student name: Hasib Enter student name: Hasib Enter student name: Jhon 输出必须如下所示: 2 students have same name 代码: Enter student name: Hasib Enter student name:

这个代码有什么问题? 我如何找到有多少学生有相同的名字

我如何找出所有 名称拼写相同(重复)(无法使用内置函数)

输入:

     Enter student name: Hasib
     Enter student name: Hasib
     Enter student name: Jhon
输出必须如下所示:

2 students have same name
代码:

     Enter student name: Hasib
     Enter student name: Hasib
     Enter student name: Jhon
#包括
结构学生{
字符名[20];
};
int main(){
结构学生s[10];
int i,j,计数=0;
对于(i=0;i<3;i++){
printf(“输入学生姓名:”);
获取(s[i].name);
}
对于(i=0;i<3;i++){
对于(j=i+1;j<3;j++){
如果(s[i].name==s[j].name){
计数++;
}
}
}
printf(“\n%d名学生同名\n\n”,计数);
}

请使用下面的代码,==不是一个用于字符串的工作命令,我们可以使用Strcmp进行相同的操作

  struct student
  {
   char name[20];
   };
 int main(){
   struct student s[10];
   int i,j=0,count,res;
   for(i=0; i<3; i++)
  {
     printf("Enter student name: ");
    gets(s[i].name);
    }
      for(i=0; i<3; i++)
   {
    for(j=i+1; j<3; j++)
    {

     if(strcmp(s[i].name, s[j].name)==0)
    {
        count++;
    }
    }
    } 
    printf("\n%d students have same name\n\n",count);
    }

struct学生
{
字符名[20];
};
int main(){
结构学生s[10];
int i,j=0,计数,res;

对于(i=0;i有多个问题:

  • C字符串不能像您那样与
    =
    进行比较。您只需比较指针,而不是数组的内容。您必须包括
    并使用:

      if (strcmp(s[i].name, s[j].name) == 0) {
          /* duplicate name */
      }
    
  • 还请注意,不能使用
    gets()
    ,因为如果输入太长,可能会导致未定义的行为。事实上,攻击者可能会利用此漏洞执行任意代码。请使用
    fgets()
    scanf(“%19s”,s[i].name)

  • 为什么定义包含10个条目的
    students
    数组,而在
    main()
    函数的其余部分只使用3个条目

以下是修改后的版本:

#包括
#包括
结构学生{
字符名[20];
};
int main(){
结构学生s[10];
int n,i,j,count;
对于(n=0;n<10;n++){
printf(“输入学生姓名:”);
if(scanf(“%19s%*[^\n]”,s[n].name)<1)
打破
}
计数=0;
对于(i=0;i
编辑:您的计数方法对于3个以上的条目是不正确的:如果4名学生的名字相同,
count
0,1
0,2
0,3
1,2
1,3
2,3
,因此6名学生的名字相同(!)

下面是一个已更正的版本,它既不使用strcmp()
,也不使用strcmp():

#包括
结构学生{
字符名[20];
};
int同一字符串(常量字符*s1,常量字符*s2){
而(*s1==*s2){
如果(*s1=='\0')
返回1;
s1++;
s2++;
}
返回0;
}
int main(){
结构学生s[10];
int n,i,j,count;
对于(n=0;n<10;n++){
printf(“输入学生姓名:”);
if(scanf(“%19s%*[^\n]”,s[n].name)<1)
打破
}
计数=0;
对于(i=0;i
请正确格式化您的代码,并告诉我们您使用了哪些输入以及结果是什么。但这里最基本的问题是,当您应该使用
strcmp
时,您使用
==
来比较字符串。此外,您的算法也不符合您的要求。@Peter我不想使用strcmp。我希望在不使用strcmp的情况下得到结果kes没有意义,请澄清您的问题、输入、期望的输出、约束等。@Drhunter,
=
不适合在C中比较字符串。永远不要使用
gets
!因此它甚至已从C标准中删除。使用例如,相反。您可能会收到警告,因为不允许隐式声明函数…即gets&strcmp
gets
存在安全风险。@Anandha我需要在不使用strcmp的情况下获取输出。感谢您的代码。有没有办法在不使用strcmp()的情况下找到副本@Drhunter只是通过创建一些实际的字符串比较代码。strcmp有什么问题吗?你有什么反对它的地方吗?你知道当使用
=
尝试比较字符串时会发生什么吗?@Someprogrammerdude实际上有人要求我不使用strcmp就这样做。这就是我要求的原因如果不使用strcmp()@Drhunter就可以找到重复项,那么您需要自己实现字符串比较代码。您需要迭代两个字符串并逐个字符进行比较。互联网上有很多关于这方面的示例和教程。