2016-08-08 8 views
1

Ich habe ein Programm erstellt, das Zeichenfolgen akzeptiert und sie in einem zweidimensionalen Array speichert. Es hat auch eine Funktion, die nach einer Zeichenfolge (die vom Benutzer eingegeben wurde) im Array sucht. Aber jedes Mal, wenn ich das Programm ausführe, hört es auf zu arbeiten, wenn es den suchenden Teil erreicht. Kann jemand meinen Fehler aufzeigen?Suchen einer Zeichenfolge aus einem Array von Zeichenfolgen

Hier ist mein Code

#include <stdio.h> 
#include <string.h> 
#define maxname 40 
#define maxlength 70 

int acceptSize() 
{ 
    int sizeOf; 
     printf("How many students?"); 
     scanf("%d",&sizeOf);  
    return sizeOf; 
} 

void acceptNames(char names[maxname][maxlength],int size) 
{ 
    int ctr; 
    for(ctr=0; ctr<size; ctr++) 
    { 
     printf("Student %d:", ctr+1); 
     scanf("%s",&names[ctr]); 
    } 

} 

int searchName(char names[maxname][maxlength], char sname[maxname]){ 
    int ctr2; 
     for(ctr2=0; ctr2<maxname; ctr2++) 
     { 
      if(strcmp(names[ctr2], sname[maxname])==0) 
      { 
       return ctr2; 
      } 
     } 
    return -1; 
} 

int main(){ 
    int ctr,size, choice, result; 
    char names[maxname][maxlength], sname[maxlength]; 

    size=acceptSize(); 
    acceptNames(names,size); 
    printf("Enter name to be searched: "); 
    scanf("%s", &sname[maxlength]); 
    result=searchName(names, sname); 
    if(result == -1) 
     printf("Match is not found."); 
    else 
     printf("Match is found!"); 
} 
+2

Verwenden Sie einen Debugger. Aber was erwartest du 'scanf ("% s ", & sname [maxlength]); – Downvoter

+0

Überprüfen Sie den Rückgabewert von 'scanf' Familie ist * unbedingt *, auch wenn es keinen Affen auf der Schreibmaschine gibt, geben wir alle Fehler ein. Es gibt die Anzahl der erfolgreich gelesenen Elemente zurück. Und Sie geben keinen Hinweis auf erwartete Eingabe oder Ausgabe. Zum Beispiel, wenn ich meinen Namen als "Weather Vane" eingeben, wird Ihr Programm nicht funktionieren, aus Gründen, die von der man-Seite für 'scanf' mit dem'% s'-Format angegeben werden. –

+0

akzeptiert es die Zeichenfolge, die im Array gesucht wird. @Downvoter –

Antwort

3
char sname[maxname] // in int searchName() 

sollte

char sname[]; // See comment#1 by weather-vane 

Auch

waren
if(strcmp(names[ctr2], sname[maxname])==0) 

waren sollte

schließlich
if(strcmp(names[ctr2], sname)==0) // sname[maxname] is not a string, sname is !! 

scanf("%s", &sname[maxlength]); 

shoud've gewesen

scanf("%s", sname); // reading a string is a case where you could omit & 

Und ein Vorschlag: Verwenden [ fgets ] statt scanf

Verwendung

+1

+1 aber Ihr erster Punkt, eine Funktion könnte nicht interessieren, welche Länge der Array Sie es sagen, einer Dimension, da C keine Überprüfung der Array-Grenzen hat. Es ist nur für mehrdimensionale Arrays wichtig, sodass der Compiler die Indexierung herausfinden kann. –

+0

Vielen Dank für Ihre Eingabe! Ich schätze es sehr. –

+0

'Und ein Vorschlag: Benutze [fgets] statt scanf' Warum ist das? 'scanf' ist vollkommen sicher, wenn es richtig verwendet wird. Das Problem mit 'scanf' ist, dass es falsch verwendet wird. Bitte erläutern Sie – Michi

Verwandte Themen