当我使用结构作为参数时strcmp()出错

Jos*_* G. 5 c string structure strcmp

我的程序需要以下功能:

注意:我没有包含数字1,2和4的代码,因为我已经完成了它们.第三个是我的问题.

  1. 只要用户仍然希望,程序就应该持续允许来自用户的输入.(动态地)
  2. 获得学生的最终成绩(平均frst_grade,scnd_grade,fnl_grade)
  3. 获得每所大学的学生人数.
  4. 输入s_id获取学生姓名.

我的问题是如何将搜索输入与s_college中的用户输入进行比较以获得学生数量.我知道的唯一方法是使用strcmp(),但它给了我这个错误:从'char'到'const char*'的无效转换[-fpermissive]

那么如何比较这两者以获得每所大学的学生人数呢?

#include<stdio.h>    
#include<string.h>    
#include<conio.h>    

int i,n,sum,search,num=0,ctr=0;

char answer,choice,choice2,search2;

struct record{

int s_id;
char s_name[100];
char s_course;
char s_college[5];
int s_scoress;
}id[100],name[100],course,college[100],scores;

struct s_scores{
int frst_grade;
int scnd_grade;
int fnl_grade;
}first,second,final;



void ADD();
void COLLEGE();
void ID();


void COLLEGE(){
printf("Enter college (abbreviation only)");
scanf("%s",&search2);
for(i=0;i<num;i++){
if(strcmp(college[i].s_college,search2)==0);
ctr++;    
}  
printf("The number of students in %s is %d",search2,ctr);
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 7

让我们来看看这些(部分)线:

char ..., search2;
...
scanf("%s",&search2);
...
...strcmp(college[i].s_college,search2)...
Run Code Online (Sandbox Code Playgroud)

变量search2单个字符.尝试将字符串放入其中将至少写入两个字符:您读取的字符串加上字符串终结符.这意味着你将写出界限.

然后,您可以使用字符变量作为参数strcmp,将内容search2转换为指针,并将该指针用作指向字符串的指针.

这两个问题都会导致未定义的行为.

search2认为是一个字符串?然后将它声明为数组,就像

char ..., search2[100];
Run Code Online (Sandbox Code Playgroud)

如果search2应该是单个字符,那么首先需要读取一个字符

scanf("%c", &search2);  // Note the changed format to read a single character
Run Code Online (Sandbox Code Playgroud)

然后你需要将你的比较改为不使用strcmp.

  • @JoseG.:"*实际上没有注意到*"这就是为什么你应该把你的编译器的警告严肃起来!他们正在免费调试!:-) (3认同)

Mik*_*CAT 5

您不能使用strcmp不是以null结尾的字符串.你可以写

if(college[i].s_college[0] == search2 && college[i].s_college[1] == '\0')
Run Code Online (Sandbox Code Playgroud)

不要忘记删除垃圾分号以使if语句有效.


Ed *_*eal 5

search2只是一个角色.你需要一个字符串

也许声明search2如下:

char search2[50];
Run Code Online (Sandbox Code Playgroud)

另请阅读scanf以防止缓冲区溢出:

scanf("%49s", search2); // Do not go past the end of search2[50]
Run Code Online (Sandbox Code Playgroud)