回 帖 发 新 帖 刷新版面

主题:求救!函数和数组问题

int cmp(char a[],char b[])
{
 int c,d,e;
 for(e=c=0;c<5;c++)
    if(a[c]==b[0])
      e++;
return(e);
}   
#include<stdio.h>
int main()
{
 char name[5][20],NO[5][10],d;
 int mark[5],a,b,c;
 char h[5]="zhang";
 printf("输入姓名\n");
 for(a=0;a<5;a++)   
    scanf("%s",name[a]);
 for(a=0;a<5;a++)
  {
   printf("输入学号\n");   
   scanf("%s",NO[b]);    
   printf("输入成绩\n");
   scanf("%d",&c);;
   mark[a]=c; 
  }
 a=cmp(name,h);
 printf("张姓人数为%d",a);
 
}
问题是,在调用的函数中,比较姓张的有多少人,我写的函数返回值都是0,出了什么问题?还有,到底怎么比较,一个一维数组,一个二维,我乱了跪谢了!!!!

回复列表 (共8个回复)

沙发

字符串的比较可以用strcmp函数。你在调用函数中只用b这个字符串的第一个字符与a这个二维数组所构成的字符串比较,所以两者不会相等,最后返回值只是e的初值罢了。

板凳


我知道可以用那个库函数,不过现在被限制了,不能用,那怎么样才能实现这个功能啊?求解答....谢

3 楼


加个头文件#include<string.h>,再看行不行!

4 楼

lz这里错误目测有这么几个地方。
第一个ls指出了。函数参数传递不对的。
第二个。 char h[5]="zhang";如果用strcmp,待会比较字符串程序很可能错,为什么?lz可以想想、、

5 楼


我用TC查过了,没有语法错误,不能用那个库函数,题目限制的,只能用函数调用比较,我想知道到底应该怎么改这个函数,错误我自己清楚的,我根本不知道怎么写才能完成比较,可以的话把函数写出来给我吧

6 楼

“我用TC查过了,没有语法错误”
==============================
这种心态不好,没有语法错误就是没错么?而且lz你真知道错误么?
以下按照lz的意思改动了下,lz多分析下您自己的代码,能有些感悟的。
#include <stdio.h>

int cmp(char a[][20],char b[]);

int main()
{
    char name[5][20];
     int  a;
     char h[6]="zhang";
     
     printf("输入姓名\n");
     
     for(a = 0; a < 5; a++ )  
     {
         scanf("%s", name[a]);
     } 
    
     a = cmp( name, h );
     printf("张姓人数为%d",a);
     return 0;
}

int cmp(char a[][20],char b[])
{
     int c,d,e;
     int idx = 0;
     
     for( e = c = 0; c < 5; c++ )
     {
         for( idx = 0; idx < 5 && a[c][idx] == b[idx]; ++idx );//这里为比较
         if( idx == 5 )
         {
             ++e;
         }
    } 

    return(e);
}

7 楼


老大,先谢谢你了,不过你还没看完我说的话呢,我知道语法没错不代表就可以,我后面说了我知道我写的函数错了啊,所以,我也冤枉啊

8 楼


呵呵不好意思,有问题多来论坛交流。

我来回复

您尚未登录,请登录后再回复。点此登录或注册