2017-03-29 23 views
-1

私の関数検索リストは、ユーザーに学生IDを入力し、そのIDと名前を一覧表示します。 「strcmpの」は、引数1を渡すとせずに、整数からポインタを作る:それは私に警告を与え、私がコンパイルしようとすると、しかしC - 'strcmp'の引き数1を渡すと、キャストのない整数のポインターになります

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); 
     } 
    } 
} 

:ここ

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

は私の機能である: はここに私の構造体でありますキャスト

+0

STR2 [10]を無視してください。その部分を取ることを忘れてしまった。 –

+2

あなたは何を比較しようとしていますか?文字列(char [])の値をchar、他の文字列と比較しようとしているようです – AntonH

答えて

3

strcmp署名は次のようになります。

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

I。 2番目のパラメータは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[]のいずれか)を期待しているが、2番目のパラメータはintであり、あなたはcharにキャストしています。あなたはintに読んで、なぜこのようにそれを書き込みませintにそれを比較したいとしているので

int in_id; 
scanf("%d",&in_id); 
if(in_id == currentstudent->ID) { 
関連する問題