[C++] Probleme mit eigenem C Proggi (Stringvergleich)

SPEED FREAK

Ensign
Registriert
Mai 2004
Beiträge
150
Alsoooo guten morgäään, ich muss ein Programm schreiben, was bis zu MAX Strings einlesen soll und dann vergleichen und per bubblesort sortieren. plz helft mir, das Programm ist in 3 dateien gegliedert (soll so sein).
Code:
/*head.h soll Fkt.Prototypen und standardheader enthalten und symbolische Konstanten*/
Code:
/*main.c enthält das Hauptprogramm*/
und zuletzt die Funktionen
Code:
/*fkt.c enthält alle nötigen funktionen*/
Ich seh grad echt nichmehr durch und muss das heute abgeben, also wenn jemand was sieht was ich falsch mache, wär echt nett .... der Compiler(devcpp) bringt mir keine fehler, führt das programm im hintergrund aus und erzeugt 100% systemauslastung. die main und die header datei stimmen und die ausgabe und sort funktion auch (meiner meinung nach ;-) ), ich seh die fehler aber nicht, liegt sicher an malloc() aber ich weiß es nich :-( bin grad echt schlecht gelaunt ^^

edit: maloc editiert geht aber alles immnochnich vielleicht mach ich auch nen fehler beim projekt erstellen :-(

thx schonmal
 
Zuletzt bearbeitet:
AW: Probleme mit eigenem C Proggi (Stringvergleich)

Was bezweckst du mit dieser Eingaberoutine?
Code:
printf("\n%d Zeichenkette: ", i++);
while(j <= MAX && puffer[j-1] != '\n' && puffer[j-1] != EOF)
{
  fflush(stdin);
  zeichen = getchar();
  puffer[j]=zeichen;
  j++;
}
puffer[j]='\0';
Dieses Konstrukt ist extrem ekelig. ;) Warum verwendest du nicht einfach scanf() dafür? Weiter oben hast du doch auch scanf() genommen.

Die Variable i wird während der Eingabe 2x pro Durchlauf inkrementiert. Das ist sicher auch nicht ganz korrekt.

In Der Ausgaberoutine wird i um eins zu weit gezählt. Statt "while(i <= anzahl)" solltest du "while(i < anzahl)" verwenden.

Die sort()-Funktion habe ich mir jetzt noch nicht genauer angesehen. Da sind noch so viele andere Fehler drin, dass das Programm gar nicht so weit kommt. :)
 
Zuletzt bearbeitet:
Hab oben nochmal editiert!!: das is alles was ich bis jetz habe
Also meine Eingabefkt sieht nu so aus, die Ausgabe habsch korrigiert .... also hab keine andere Möglichkeit gesehen einen String in C einzulesen weil scanf("%s",x) geht net
 
Zuletzt bearbeitet:
Geht nicht gibt's nicht. Einen String kannst du mit scanf() so einlesen: "scanf("%s", puffer, sizeof(puffer));"

Code:
/*fkt.c enthält alle nötigen funktionen*/

#include "head.h"

/*Eingabefunktion*/
int eingabe (char *text[])
{
	int anzahl, i=0, j=0;
	char puffer[MAX], zeichen;

	do
	{
		printf("\nGeben sie Anzahl der Zeichenketten ein [1 bis 100 möglich]!!!: ");
		scanf("%d", &anzahl);
		if (anzahl < 1 || anzahl > 100)
		{
			printf("\nNur zwischen 1 und 100 Zeichenketten !!!");
		}
	}
	while(anzahl<1 || anzahl>100);

	while(i < anzahl)
	{
		printf("\n%d Zeichenkette: ", i + 1);

		scanf("%s", puffer, sizeof(puffer));
		j = strlen(puffer) + 1;

		text[i] = (char *) malloc(j*sizeof(char));

		if(text[i] == NULL)
		{
			printf("\nSpeicherreservierung felgeschlagen!!\n"); 
			return EXIT_FAILURE;
		}
		strcpy(text[i],puffer);

		i++;
	}
	return anzahl;
}

/*Bubblesort*/
void sort(char *text[], int anzahl)
{
	int i, j;
	char *temp;

	for (i=0; i<anzahl-1; i++)
	{
		for (j=i+1; j<anzahl; j++)
		{
			if (strcmp(text[i], text[j]) > 0)
			{
				temp = text[i];
				text[i] = text[j];
				text[j] = temp;
			}
		}
	}
}

/*Ausgabefunktion*/
void ausgabe(char *text[], int anzahl)
{
	int i;

	for (i=0; i<anzahl; i++)
	{
		printf("\n%s", text[i]);
	}
}
Du darfst in der sort()-Funktion die Variable "anzahl" nicht verändern, da du diese ja danach für die Ausgabe nochmal brauchst.
 
Zuletzt bearbeitet:
wooooohooooo ich danke dir ...... ich würde ja sagen ich liebe dich aber "iam not gay" (Homer J. Simpson) :lol: . ey echt wenn ich dir einen ausgeben kann :schluck: dann.... . jetz trink ich erstmal n bierchen ^^
 
Wenn Ulm von mir aus betrachtet nicht am A... der Welt wäre ;), würde ich mal auf ein Bierchen vorbei kommen. Aber so... belassen wir es einfach dabei, dass ich dir ein wenig helfen konnte.

Freut mich. :)
 
Was mir gerade noch eingefallen ist: Du solltest in der eingabe()-Funktion erzwingen, dass mindestens 2 Strings eingegeben werden müssen. Andernfalls (bei anzahl==1) gibt's Probleme mit der aktuellen Implementierung der sort()-Funktion.
 
Zurück
Oben