Ich habe ein Problem mit einem Code in C. Ich muss eine Liste von Namen eingeben, die durch die Eingabetaste getrennt werden. Die Eingabe wird gestoppt, wenn der Benutzer das Wort "QUIT" eingibt. Das Programm muss die Liste der Namen in alphabetischer Reihenfolge drucken (alle Buchstaben sind Kleinbuchstaben).Dynamische Zuweisung eines Arrays von Zeigern
Die Anzahl der Namen sowie die Länge jedes Namens ist unbekannt und muss dynamisch zugewiesen werden. Wenn ein Name mehrmals in der Eingabe erscheint, sollte er nur einmal in der Ausgabe erscheinen.
hier ist ein Beispiel dafür, wie der Code ausgeführt werden soll:
Please enter a list of names:
john
chris
ben
chris
david
QUIT
Es gibt 4 Namen:
ben
chris
david
john
Ich dachte über eine dynamische zugeordnete Array von Zeigern verwendet wird, in dem jeder Zeiger enthalten jeweils Name und ist dynamisch zugeordnet. Das Problem ist, dass ich nicht weiß, wie man es schreibt, ohne einen Laufzeitfehler zu bekommen.
Hinweis: Zu diesem Zeitpunkt darf ich Dinge, die ich noch nicht gelernt habe, wie structs und recursion, nicht verwenden und kann nur die Bibliotheken stdio.h, stdlib.h und string.h benutzen.
Vielen Dank im Voraus.
hier ist der Code (es ist nicht fertig ist, aber ich bin an diesem Punkt einen Laufzeitfehler erhalten):
char **nameList;
int i = 0, j = 0, size = 0, check = 0;
printf("Please enter list of names:\n");
//allocate one cell of memory to the list
nameList = (char**)malloc(sizeof(char));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
//Add the first letter to the first string in the array
nameList[i][j] = getchar();
size += sizeof(char);
while (check != 1)
{
//check if current entered letter is not an enter
while (nameList[i][j] != '\n')
{
//allocated another char sized memory to the string
nameList = (char**)realloc(nameList, (size + sizeof(char)));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
j++;
//adding another char to the current string
nameList[i][j] = getchar();
size += sizeof(char);
}
j = 0;
if (nameList[i][j] == 'Q')
{
if (nameList[i][j + 1] == 'U')
if (nameList[i][j + 2] == 'I')
if (nameList[i][j + 3] == 'T')
check++;
}
i++;
}
Bitte lesen Sie [ask] und [mcve]. Sie erwähnen einen Laufzeitfehler, was ist der Code, der das verursacht? Wir können Ihnen bei bestimmten Problemen behilflich sein, die Sie zu beheben versucht haben, aber Stack Overflow ist kein Code-Schreibdienst. – whrrgarbl
Ok, Sie sollten es mit dynamischer Zuweisung eines Arrays von Zeigern und Strings tun können. Sie sollten also den aktuellen Code und Ihren Fehler anzeigen. –
Ich werde jede Antwort abstimmen, die diesen Schüler von seiner/ihrer Lernchance beraubt. –