Zum Inhalt springen

Eine Eingabezeile die Länger als 80 Zeichen ist


Psycho~zicke

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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;       

}


Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...