2016-12-19 5 views
-1

Deklarieren Sie eine Person-Struktur, die die folgenden zwei Datenelemente enthält: Name und Alter.Wie suche ich nach Struktur char c?

struct Person 
{ 
char name[20]; 
int age; 
}; 

definieren fillPersons Funktion, die eine leere Palette von Personen erfolgt, und füllt das Array.

void fillPersons(struct Person * myPs); 

Für Funktion

struct Person p[ARRAY_SIZE]; 

definieren searchPerson Funktion, die eine Reihe von Personen erfolgt, und den Namen zu suchen. Die Funktion gibt das entsprechende Alter zurück, wenn die Person gefunden wird, andernfalls -1.

int searchPerson(struct Person * myPs, char * myName); 

definieren printPersons Funktion, die eine Reihe von Personen erfolgt, und druckt den Inhalt des Arrays.

void printPersons(struct Person * myPs); 

Haupt Fuction

int main() 
{ 
struct Person p[ARRAY_SIZE]; 
int a; 
int isFound; 
char myName[20]; 

Schaltergehäuse für Benutzeroberfläche

do 
{ 
    printf("1)FILL ARRAY\n"); 
    printf("2)SEARCH BY NAME\n"); 
    printf("3)PRINT ARRAY\n"); 
    printf("4)EXIT\n"); 
    printf("Search Operation:"); 

    scanf_s("%d", &a); 
    switch (a) 
    { 
    case 1:fillPersons(p); break; 

Ich schreibe den Hauptteil des Suchens, aber ich kann die Funktion füllen.

case 2:printf("\Give the name to search for:"); 
     scanf_s("%s", &myName); 
     isFound = searchPerson(p, myName); 
     if (isFound == -1) 
     { 
      printf("%s not avaible in the array. \n", myName); 
     } 
     else 
     { 
      printf("The age of %s is %d.\n", myName, isFound); 
     } 
     break; 

Nach diesem Teil ist es in Ordnung, Namen und Alter zu lesen, aber kann nicht tun, es ist Teil der Suche.

case 3:printPersons(p); break; 
    case 4:printf("\nProgram exits ..."); exit(0); 
    } 
} while (a != 4); 

system("pause"); 
return 0; 
} 

Es ist in Ordnung, diesem Scanf Teil

void fillPersons(struct Person * myPs) 
{ 
    int i; 
    for (i = 0; i < 4; i++)//defining 4 person i<4 
    { 
     scanf_s("%20s", p[i].name,_countof(p[i].name));//if i dont do _coutof 
     scanf_s("%d", &p[i].age);      // i get null.ptr error 
    }             // on visiual studio 
} 

Drucken der Schüler Namen und das Alter

void printPersons(struct Person * myPs) 
{ 
    int i; 
    for (i = 0; i < 4; i++) 
    { 
     printf("%s %d", p[i].name, p[i].age); 
    } 
} 

Aber ich weiß nicht, wie man mit innen auf fuction füllen ?

int searchPerson(struct Person * myPs, char * myName) 

Die Ausgabe sollte so sein

output

+0

Das Wichtigste zuerst, Ihr Programm zusammenstellen, finden und alle Fehler beheben. Speziell rufen Sie Funktionen mit '* myPs' auf, aber Sie greifen auf' p [i] .'variable zu. Die Regel von SO ist also, dass Sie ein [mcve] posten müssen und wenn Sie es nicht kompilieren können, weisen Sie darauf hin, welche Fehler Sie beim Kompilieren bekommen. – KevinDTimm

+0

Noch eine Sache, 'scanf_s ("% s ", & meinName);' ist nicht ideal (benutze stattdessen fgets). Unabhängig davon sollte der Aufruf 'scanf_s ("% s ", meinName) lauten;' – KevinDTimm

+0

Wenn Sie einen C++ - Kurs verkauft haben, müssen Sie darüber informiert werden, dass der Kurs fehlgeschlagen ist. –

Antwort

0

scheint die Funktion, die Sie fehlen strcmp ist zwei Strings zu vergleichen.

Es könnte sein, wie:

int searchPerson(struct Person * myPs, char * myName) 
{ 
    int i; 
    for (i = 0; i < ARRAY_SIZE; i++) 
    { 
     if (strcmp(myPs[i].name, myName) == 0) 
     { 
      return myPs[i].age; 
     } 
    } 
    return -1; 
} 

Im Allgemeinen Bekanntmachung:

Wenn Sie das Array an eine Funktion als struct Person * myPs passieren, Sie myPs innerhalb der Funktion verwenden. Weiter sollten Sie die definierte Array-Größe anstatt der harten Codierung 4 verwenden.

So Ihre printPersons sollte sein:

void printPersons(struct Person * myPs) 
{ 
    int i; 
    for (i = 0; i < ARRAY_SIZE; i++) 
    { 
     printf("%s %d", myPs[i].name, myPs[i].age); 
    } 
} 

Gleiches gilt für fillPersons

+0

Nachdem ich dies als meine Funktion verwendet habe, bekomme ich den Fehler, den Namen –

+0

@ BatuhanGöbekli nicht zu finden - hast du das scanf Problem behoben? 'scanf_s ("% s ", & meinName);' -> 'scanf_s ("% s ", meinName);' – 4386427

+0

Immer noch derselbe Fehler –

0

Das erste, was Sie setzen in Ihrer Frage alle Funktionen außer der, die Sie Probleme geben: searchPerson.
Dann ist Ihr Fehler mit diesem Befehl:

scanf_s ("% s", & myName);

Dementsprechend dass Sie myName als char Zeiger deklariert, diese Weise sind die Zuweisung Sie die Zeichenfolge an die Adresse des myName, nicht in die Speicherzellen zu es zeigen.

Stattdessen sollte sein:

scanf_s("%s", myName);