我的功能搜索列表要求用户输入学生ID并列出该学生ID和姓名。 这是我的结构:
<backslash>
这是我的功能:
struct student {
int ID;
char name[40];
struct student *next;
};
typedef struct student Student;
然而,当我尝试编译时,它给了我一个警告:传递'strcmp'的参数1使得指针来自整数而没有强制转换
答案 0 :(得分:4)
您没有将正确类型的变量传递给这些函数
scanf("%d", &str);
预计str为int
,但它是一个字符串。
if(strcmp(str, (char)currentstudent->ID) == 0){
这需要两个字符串(char *
或char[]
),但第二个参数是int
,并且您将其转换为char
。< / p>
由于您正在阅读int
并希望将其与int
进行比较,为什么不这样写:
int in_id;
scanf("%d",&in_id);
if(in_id == currentstudent->ID) {
答案 1 :(得分:3)
strcmp
签名如下所示:
int strcmp(const char *s1, const char *s2);
即。第二个参数必须是const char*
类型。但是你给它一个char
。因此,您收到的错误消息(char
是&#34;整数&#34;类型)。
此外,scanf("%d", &str);
请求scanf
读取整数并将其存储到str
。但str
不是整数类型。 (如果您启用了编译警告,编译器会抓住这个。)
你需要这样的东西:
printf("Enter a student ID: ");
int givenID;
scanf("%d", &givenID); // read integer input to integer variable
while(currentstudent != NULL) {
if(currentstudent->ID == givenID) { // check whether this user has the ID entered by the user
printf("ID#: %d Name: %s", currentstudent->ID, currentstudent->name);
break; // we found what we were looking for, stop the loop
}
currentstudent = currentstudent->next; // move on to the next student in the list
}