C - 传递'strcmp'的参数1使得指针来自整数而没有强制转换

时间:2017-03-29 15:08:30

标签: c linked-list strcmp

我的功能搜索列表要求用户输入学生ID并列出该学生ID和姓名。 这是我的结构:

<backslash>

这是我的功能:

struct student {
    int ID;
    char name[40];
    struct student *next;
};
typedef struct student Student;

然而,当我尝试编译时,它给了我一个警告:传递'strcmp'的参数1使得指针来自整数而没有强制转换

2 个答案:

答案 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
}