2017-03-29 184 views
-1

我的功能searchlist要求用戶輸入一個學生證,並列出了學生的ID和姓名。 這裏是我的結構:Ç - 過客「的strcmp」的參數1時將整數指針不進行強制轉換

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

這裏是我的功能:

void searchlist(Student *SLIST){ 
    Student *currentstudent = SLIST; 
    char str[10], str2[10]; 

    printf("Enter a student ID: "); 
    while(currentstudent != NULL){ 
     scanf("%d", &str); 
     if(strcmp(str, (char)currentstudent->ID) == 0){ 
      printf("ID#: %d Name: %s", currentstudent->ID, currentstudent->name); 
     } 
    } 
} 

然而,當我嘗試編譯,它給了我一個警告:傳遞「的strcmp」的參數1,使指針從整數無鑄造

+0

請忽略str2的[10]。忘了把那部分拿出來。 –

+2

你想比較什麼?因爲它看起來像你試圖比較字符串(char [])與char的值,而不是另一個字符串... – AntonH

回答

3

strcmp簽名如下所示:

int strcmp(const char *s1, const char *s2); 

I.e.第二個參數必須是const char*。但你給它一個char。因此你得到的錯誤信息(char是一個「整數」類型)。


此外,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 
} 
4

你沒有通過正確的類型變量的這些功能

scanf("%d", &str); 

這是期待str爲int,但它是一個字符串。

if(strcmp(str, (char)currentstudent->ID) == 0){ 

這是期待兩個字符串(無論是char *char[]),但第二個參數是一個int和你它強制轉換爲char

既然你在int閱讀,並希望將其與一個int爲什麼不寫這樣的:

int in_id; 
scanf("%d",&in_id); 
if(in_id == currentstudent->ID) { 
相關問題