Psycho~zicke Geschrieben 1. Oktober 2007 Geschrieben 1. Oktober 2007 Hallöchen! Hab ma ne frage un es wäre lieb wenn mir jemand helfen könnte. Ich hab eine aufgabe und hab auch das Programm dazu geschrieben. Nur leider zeigt der compiler mir immerwieder nen fehler. Ich hab nun alles versucht aber finde diesen Fehler nicht. Ich schreib ich mal den Quelltext un den fehler hier hin evt sehr ihr ja wo der fehler liegt. Danke schon ma im vorraus *Schreibe ein Programm, das alle Eingabezeilen ausgibt, die länger als 80 Zeichen sind. * ********************************************************/ #include <stdio.h> # define MAXLINE 1000 // maximale Länge einer Eingabezeile # define MINLINE 80 // mindest Länge der Eingabezeile die Ausgegeben werden soll int getline(char line[], int maxline); void main() { int len; // Länge der momentanen Eingabezeile char line[MAXLINE]; // momentane Eingabezeile while ((len = getline(line, MAXLINE))>0) { if (len > MINLINE) // wenn len größer ist als MINLINE dann geb... printf ("%s", line); // ...die länge der Zeile und die Zeile aus. } return 0; // ansonsten beginn von vorne. } Der Fehler dazu lautet: ERROR:Undefined symbol _getline in module 1-172.c Zitieren
Guybrush Threepwood Geschrieben 1. Oktober 2007 Geschrieben 1. Oktober 2007 getline ist eine C++ Funktion bzw wenn du die selber deklarierst dann musst du auch definieren was die Funktion machen soll. Bisher hast du ja nur den Funktionskopf int getline(char line[], int maxline); [/PHP] und der Compiler bzw der Linker sagt dir ja das getline nicht definiert ist. Zitieren
Psycho~zicke Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 Hab die getline funktion hinzugefügt aber so richtig rund läuft es immernoch nicht. Man kann das Programm zwar ausführen aber es beendet sich teilweise nicht geordnet. Sehr Ihr evt woran das liegt? /******************************************************* *Schreibe ein Programm, das alle Eingabezeilen ausgibt, die länger als 80 *Zeichen sind. * ********************************************************/ #include <stdio.h> # define MAXLINE 1000 // maximale Länge einer Eingabezeile # define MINLINE 80 // mindest Länge der Eingabezeile die Ausgegeben werden soll // deklaration der Funktion getline int getline(char line[MAXLINE], int maxline); void main() { int len; // Länge der momentanen Eingabezeile char line[MAXLINE]; // momentane Eingabezeile while ((len = getline(line, MAXLINE))>0) { if (len > MINLINE) // wenn len größer ist als MINLINE dann geb... printf ("%s", line); // ...die länge der Zeile und die Zeile aus. } return 0; // ansonsten gib den wert 0 zurück. } // Definition der Funktion getline int getline(char line[MAXLINE], int maxline) { // deklaration der Variablen int c, i, j; for(i=0;(c=getchar())!='A' && c!='\n'; ++i) { if (i<maxline-2) // maxline-2 weil einma -1 da bei 0 angefangen wird zu zählen und einma -1 weil ich ein \0 anhängen mag. { line[i] = c; // die Zeichenkette line mit der zu geordneten Max. größe ist gleich die Eingabe } if (c =='\n') { line[j] = c; ++j; ++i; } } line[i] = '\0'; // setz '\0 ' ans ende der Zeichenkette so das das Programm weiß das die Zeichenkette nun vorbei ist. return i; } Zitieren
Klotzkopp Geschrieben 10. Oktober 2007 Geschrieben 10. Oktober 2007 Mal abgesehen davon, dass es beendet sich teilweise nicht geordnet.keine besonders tolle Fehlerbeschreibung ist: Du initialisierst j nicht. Mein Compiler findet das auch nicht so toll: main.cpp(40) : warning C4700: uninitialized local variable 'j' used Außerdem heißt es 'int main', nicht 'void main'. Zitieren
Psycho~zicke Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 Mit nicht geordnet meine ich das das Programm einfach ausgeht. Sich halt aufhängt oder wie man das nennt. Es kommt keine Fehlermeldung sonst hätte ich sie dazu geschrieben. was meinst du mit Du initialisierst j nicht??? ich weiß wenn ich ehrlich bin nicht ma für was ich j brauche denn ich möchte doch nur die eingabe rausgeben bekommen und dafür müsste doch i vollkommen reichen oder? Zitieren
Klotzkopp Geschrieben 10. Oktober 2007 Geschrieben 10. Oktober 2007 Mit nicht geordnet meine ich das das Programm einfach ausgeht. Sich halt aufhängt oder wie man das nennt."Einfach ausgehen" ist normal, wenn ein Programm beendet wird. Aufhängen ist etwas anderes. Dann geht das Programm eben nicht aus. Was genau ist denn das beobachtete (und das gewünschte) Verhalten? was meinst du mit Du initialisierst j nicht???Du weist der Variablen j nirgends einen Wert zu, benutzt sie aber in deinem Code. Welcher Wert dann in j steht, ist mehr oder weniger zufällig. ich weiß wenn ich ehrlich bin nicht ma für was ich j brauche denn ich möchte doch nur die eingabe rausgeben bekommen und dafür müsste doch i vollkommen reichen oder?Du musst dir doch irgendwas dabei gedacht haben, oder? Ich kann es deinem Code leider auch nicht ansehen. Du fügst, wenn du ein A oder einen Zeilenumbruch einliest, an der Stelle j einen (weiteren?) Zeilenumbruch ein. Da mir absolut nicht klar ist, was das soll, kann ich dir auch nicht sagen, ob du das brauchst. Zitieren
Psycho~zicke Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 Also ich möchte ja nicht das das Porgramm einfach ausgeht sondern das es mir dann anzeigt das der Text zu kurz somit nicht minline erfüllt oder wenn ich die maxline überschreite er mir dann halt sagt das der Text zu lang ist. Hab mir das Programm grad noch mal angeschaut un bin zu dem entschluss gekommen das das mit dem j schwachsin ist. Denn ich hab dem Programm ja oben schon gesagt das wenn ein Zeilenumbruch kommt er das Programm beenden soll, da ist es absolut überflüssig an der stelle j einen Zeilenumbruch einzufügen. Ich hab das jetzt ma raus genommen un den code bissel verändert. Allerdings sagt mir mein Compiler nun das ich nen Fehler drin hab. der neue code ist: /*Schreibe ein Programm, das alle Eingabezeilen ausgibt, die länger als 80 *Zeichen sind. * ********************************************************/ #include <stdio.h> # define MAXLINE 20 // maximale Länge einer Eingabezeile # define MINLINE 10 // mindest Länge der Eingabezeile die Ausgegeben werden soll // deklaration der Funktion getline int getline(char line[MAXLINE], int maxline); int main() { int len; // Länge der momentanen Eingabezeile char line[MAXLINE]; // momentane Eingabezeile while ((len = getline(line, MAXLINE))>0) { if (len > MINLINE) // wenn len größer ist als MINLINE dann geb... printf ("%s", line); // ...die länge der Zeile und die Zeile aus. if (len < MINLINE) // sollte len kleiner sein wie die vorgebene Minline gibt mir die nächste zeile aus. { printf ("Diese Zeile ist zu kurz"\n); } if (len > MAXLINE) // sollte len größer sein wie die vorgegebene Maxline dann gib mir die nächste Zeile aus. { printf ("Diese Zeile ist zu lang"\n); } } return 0; // ansonsten gib den wert 0 zurück. } // Definition der Funktion getline int getline(char line[MAXLINE], int maxline) { // deklaration der Variablen int c, i; for(i=0;(c=getchar())!='A' && c!='\n'; ++i) { if (i<maxline-2) // maxline-2 weil einma -1 da bei 0 angefangen wird zu zählen und einma -1 weil ich ein \0 anhängen mag. { line[i] = c; // die Zeichenkette line mit der zu geordneten Max. größe ist gleich die Eingabe } } line[i] = '\0'; // setz '\0 ' ans ende der Zeichenkette so das das Programm weiß das die Zeichenkette nun vorbei ist. return i; } der fehler dazu ist: Fatal neu2.c 30:Internal Compiler error in function main Zitieren
Klotzkopp Geschrieben 10. Oktober 2007 Geschrieben 10. Oktober 2007 Also ich möchte ja nicht das das Porgramm einfach ausgeht sondern das es mir dann anzeigt das der Text zu kurz somit nicht minline erfüllt oder wenn ich die maxline überschreite er mir dann halt sagt das der Text zu lang ist.Das zeigt das Programm ja auch an. Falls du meinst, dass sich das Konsolenfenster schließt: Das ist auch normal. Wenn du das nicht willst, musst du am Ende Code einfügen, der dafür sorgt, dass sich das Programm nicht sofort beendet. Du kannst z.B. noch einmal etwas mit scanf einlesen. printf ("Diese Zeile ist zu kurz"\n);Das \n muss schon in den String. Zitieren
Psycho~zicke Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 ich hab den fehler gefunden. :upps Nun funktioniert es. Danke für die hilfe! Zitieren
Psycho~zicke Geschrieben 10. Oktober 2007 Autor Geschrieben 10. Oktober 2007 ja das hab ich dann auch festegstellt... Aber aller anfang ist schwer... Bin ja noch ganz weit am anfang Danke schön für deine hilfe, nun funktioniert es so wie ich es gern hätte. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.