コマンドラインから名前をとり、それらをリンクリストに入れて対応する番号を返すプログラムを書いていますその名前の位置がリストに表示されます。名前がリストにない場合、プログラムは-1を返します。私はリスト内の文字列の位置を返す関数を書く(Cコード)
./a Chris Sale Jay Cutler Kermit Bob
として私のプログラムを実行している場合たとえば、出力はそうで
Chris is at position 1
Sale is at position 2
Jay is at position 3
こととすべきです。
そして(私のコードで)ビッグ・アルの出力はIが入力された名前の位置を返す関数以外のすべてのコードを持っている
Big Al is at position -1
だろう。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node {
char *name;
struct node *next;
} Node;
// function signatures
int position(char *, Node *);
Node *addEnd(char *, Node *);
// code for position goes here (what I need help with)
int position(char *c, Node *list) {
int num = -1;
Node *temp = list;
while(temp != NULL) {
for(num = 1; num < temp; num++) {
if(strcmp(temp->name, c) == 0) {
return num;
}
}
temp = temp->next;
}
return num;
}
/////////////////////////////////////////////////////////////////// ///////////////
Node *addEnd(char *n, Node *list) {
Node *newOne = malloc(sizeof(Node));
newOne->name = malloc(strlen(n)+1);
strcpy(newOne->name, n);
newOne->next = NULL;
if (list == NULL)
return newOne;
Node *temp = list;
while (temp->next != NULL)
temp = temp->next;
temp->next = newOne;
return list;
}
//////////////////////////// //////////////////////////////
int main(int argc, char *argv[]) {
Node *list = NULL;
int a;
printf("Adding people to the list\n\n");
for (a=1; a<argc; a++)
list = addEnd(argv[a], list);
printf("Finding positions of people in the list\n\n");
for (a=1; a<argc; a++)
printf("%s is at position %d\n", argv[a], position(argv[a], list));
printf("\nChecking for people that don't exist\n");
printf("Big Al is at position %d\n", position("Big Al", list));
return 0;
}
は現在、私はコンパイルエラーを取得する:
where.c: In function ‘position’:
where.c:20:20: warning: comparison between pointer and integer
for(num = 0; num < temp; num++) {
そして私はこの比較をすることはできませんが、私はここから何をすべきか分かりません。ヘルプは非常に高く評価されます。
は、私はそのラインを見つけることができませんあなたが表示するコードの 'for(num = 0; num
usr2564301
あなたは既に、(temp!= NULL)、temp = temp-> whileのリストを繰り返していますが、なぜ** loopのために**必要ですか? –