Jos*_* G. 5 c string structure strcmp
我的程序需要以下功能:
注意:我没有包含数字1,2和4的代码,因为我已经完成了它们.第三个是我的问题.
我的问题是如何将搜索输入与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)
让我们来看看这些(部分)线:
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.
您不能使用strcmp不是以null结尾的字符串.你可以写
if(college[i].s_college[0] == search2 && college[i].s_college[1] == '\0')
Run Code Online (Sandbox Code Playgroud)
不要忘记删除垃圾分号以使if语句有效.
你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)