Ich schreibe ein Programm (in C), das Namen von der Befehlszeile übernimmt, sie in eine verknüpfte Liste einfügt und eine entsprechende Zahl zurückgibt mit der Position des Namens in der Liste. Wenn der Name nicht in der Liste enthalten ist, gibt das Programm eine -1 zurück. Zum Beispiel, wenn ich laufe mein Programm alsSchreiben einer Funktion, die eine Zeichenfolgenposition in einer Liste zurückgibt (C-Code)
./a Chris Sale Jay Cutler Kermit Bob
Der Ausgang
Chris is at position 1
Sale is at position 2
Jay is at position 3
und so weiter sein sollte.
Und dann ist der Ausgang für Big Al (in meinem Code) würde mit Ausnahme der Funktion
Big Al is at position -1
Ich habe den gesamten Code sein, der die Position des Namens zurückgibt, die eingegeben wird.
#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;
}
Derzeit erhalte ich einen Übersetzungsfehler:
where.c: In function ‘position’:
where.c:20:20: warning: comparison between pointer and integer
for(num = 0; num < temp; num++) {
Und ich weiß, ich kann diesen Vergleich nicht machen, aber ich habe keine Ahnung, was ich von hier aus tun soll. Hilfe würde sehr geschätzt werden.
Ich verstehe nicht, dass die Linie finden 'für (num = 0; num
usr2564301
Sie durchlaufen bereits die Liste mit while (temp! = NULL) und temp = temp-> next, warum brauchen Sie das ** für ** loop? –