Zum Inhalt springen

Leerzeichen und Tab Zeichen am ende einer Zeile weg lassen!


Empfohlene Beiträge

Geschrieben

Hallo!

Ich bins ma wieder! Tut mir auch echt voll leid das ich immer wieder hier nachfragen muss aber leider hat bei uns in der Firma im mom keiner Zeit mir weiter zu helfen bzw fragen zu beantworten.

Also ich möchte ein Programm schreiben das wenn am ende der Eingabezeile ein Leerzeichen oder Tabzeichen ist, das es weg gelassen wird. Genauso soll das Programm leerezeilen iggnorieren. Ich hab ein Programm geschrieben das füg ich auch gleich bei es zeigt mir keine Fehlermeldung oder sowas aber ich kann nach dem compilieren nicht erkennen ob die leerzeichen bzw tabzeichen nun weg sind da er mir die Zeile ausgibt un dann direkt in die nächste Zeile springt. So das ich nicht sehe was er nach dem letzten Buchstaben/Zeichen schreibt.

Meine frage wäre nun: Ist das Programm richtig geschrieben un erfüllt seinen Zweg? Hoffe ja das ihr mir da weiter helfen könnt bzw evt wisst wie ich das elbst überprüfen kann.


/*********************************************************

*Schreibe ein Programm, das Leerzeichen und Tabulatorzeichen am Ende von 

*Eingabezeilen entfernt und das auch völlig leere Zeilen unterdrückt.

**********************************************************/




#include <stdio.h>


void main()


{  

    // deklaration der Variablen

    int iEingabe; 

    int iVorher;

    // Zuordnung der Werte

    iVorher = 'w';


    // Wird solange ausgeführt wie die Eingabe nicht A ist.

    while ((iEingabe = getchar ()) != 'A')

    {

        //    Ausführungsbedingung    

        // Prüft ob iEingabe ein '\n' ist. Falls es nicht zutrifft 

        // geht die Schleife bei else weiter ansonsten 

        // geht die Schleife ganz normal weiter.          

        if (iEingabe == '\n')  

        {

          // Prüft ob iVorher kein ' ' oder \t ist. Falls es keins ist 

          // tritt putschar in kraft. Falls doch beginnt die Schleife von vorne.  

          if (iVorher != ' ' || iVorher !='\t') 

          {

            putchar (iEingabe); // gibt iEingabe aus, wenn beide if-Funktionen erfüllt sind. 

          }

        }

        // Else tritt dann in Kraft wenn iEingabe kein ' ' ist.

        else

        {

          putchar (iEingabe); // gibt iEingabe aus, wenn nur die erste if-Funktion nicht erfüllt ist.

        }

        iVorher = iEingabe;  // kopiert den Wert von iEingabe auf iVorher.

    }

    printf("fertig"); // Beendet das Programm.

}

Geschrieben

Weil ich keine ahnung hab wie dieser Debugger funktioniert. Hab grad versucht daraus schlau zu werden aber der wiederholt die schleife immer un immer wieder. Entweder hab ich nen Fehler im code oder versteh den debugger noch nicht. Dazu muss ich sagen, ich hab den debugger vorgestern das erstema gezeigt bekommen für ca 10 minuten. Kenn mich mit dem noch nicht so aus.

Geschrieben

if (iVorher != ' ' || iVorher !='\t')

Diese Abfrage ist unsinnig, weil die geprüfte Bedingung immer wahr ist.

Egal welchen Wert iVorher hat, es ist immer ungleich einem Leerzeichen ODER ungleich einem Tab. Für ein Tab-Zeichen ist der erste Teilausdruck wahr, für ein Leerzeichen der zweite. Für alle anderen sind beide wahr.

Du meinst vermutlich &&, nicht ||.

Geschrieben

ahhh ok da hab ich mich wohl vertan.

Nun bleibt er hinter der Eingabezeile und springt nicht mehr in die nächste Zeile aber er entfernt die leerzeichen und Tabzeichen nicht am ende der Eingabezeile.

Danke für die Hilfe. Nun weiß ich zumindest schon ma das das Programm so nicht funktioniert und kann weiter schauen woran es liegt.

Geschrieben
Weil ich keine ahnung hab wie dieser Debugger funktioniert. Hab grad versucht daraus schlau zu werden aber der wiederholt die schleife immer un immer wieder. Entweder hab ich nen Fehler im code oder versteh den debugger noch nicht. Dazu muss ich sagen, ich hab den debugger vorgestern das erstema gezeigt bekommen für ca 10 minuten. Kenn mich mit dem noch nicht so aus.

Wie man den genau bedient kommt auf die Entwicklungsumgebung drauf an. Grundsätzlich bietet ein Debugger aber die Möglichkeit den genauen Programmverlauf schrittweise zu verfolgen bzw. an bestimmte Stellen im Programm einen Haltepunkt zu setzten. Dabie hat man dann die Möglichkeit den Inhalt aller gültigen Variablen einzusehen oder zu verändern.

Der wirkt zwar am Anfang immer total kompliziert, aber sobald man den dreh erstmal raushat ist das das beste Hilfsmittel um Felher im Programm zu finden.

Geschrieben
OK danke werd mich das we ma dahinter klemmen das ich den versteh. Also im moment sieht das alles für mich noch aus wie chinesisch ;)

Danke für den tip!!!

da geht es dir wie mir. bei uns erklärt auch keiner etwas richtig. und wenn der eine etwas erklärt, dann sagt der andere das dass *******e ist. und die standartanwort... denk doch mal nach... oder.... lies doch mal nach...

:-) das bekommst du schon hin!

Geschrieben

Nachdem ich mir das Programm nun noch ma genau angeschaut hatte und es auch noch mal geschrieben hatte sagte mein Kollege das es nun Funktionieren müsste (was es aber nicht tat) nahm ich mir das Lösungsbuch zur hand. Leider bringt mich das auch nicht weiter. Denn die Lösung wie die darin steht lässt sich auch nicht kompelieren.

Immer wieder erscheint der Fehler:

Erorr 1-18.c 17 :Type mismash in redeclaration of remove

Error 1-18.c 17:Earlier declaration of remove

Erorr 1-18.c 34 :Type mismash in redeclaration of remove

Hier mal der code...

*Schreibe ein Programm, das Leerzeichen und Tabulatorzeichen am Ende von 

*Eingabezeilen entfernt und das auch völlig leere Zeilen unterdrückt.

* ********************************************************/


#include <stdio.h>

#define MAXLINE 1000 // Maximale länge der Eingabezeile


// deklaration der Funktion getline

int getline(char line[], int maxline);

int remove(char s[]);    // daklartion der Funktion remove


main()


{  

    char line[MAXLINE];  //momentane Eingabezeile  


    while (getline(line, MAXLINE)>0)

    {

      if (remove(line)>0)  // wenn (remove(line) größer 0) ist...

      {

        printf("%s", line);  // ... gibt die zeile aus

      }

    }

    return 0;

}

int remove(char s[])

{

  //deklaration der Varibalen

  int i;

  //Zuordnung der Werte

  i = 0;

  // wird solange ausgeführt wie s[i] kein Zeilentrenner ist.

  while (s[i] !='\n')

     ++i;     

  --i;

  while (i >=0 && (s[i] == ' '|| s[i] == '\t'))

     --i;  

  if (i >= 0)          

  {

     ++i;             

     s[i] = '\n';    

     ++i;             

     s[i] = '\0';     

  } 

  return i;        

} 

int getline(char line[], int maxline)

{

  // deklaration der Variablen

  int c, i;


  for(i=0;(c=getchar())!='A' && c!='\n'; ++i)


  if (i<maxline-2)   

  {

      line[i] = c;   

  } 

  if (c =='\n')  

  {

    line[i] = c;            

    ++i;          

    line[i] = '\0';

  }    

  return i;       

}

Geschrieben

Es gibt bereits eine Funktion namens remove in der Standardbibliothek. Diese Funktion dient zum Löschen von Dateien, und ist in stdio.h deklariert.

Du musst deine Funktion anders nennen.

Und wenn das so in deinem Buch steht, solltest du dir ein besseres suchen ;)

Geschrieben
Also ich sollte mir wirklich ein anderes Buch zulegen. Das steht da wirklich so...
Möglicherweise hat der Autor einen C++-Compiler benutzt. In C++ kann man Funktionen überladen, d.h. mehrere Versionen mit gleichem Namen, aber unterschiedlichen Parameterlisten anlegen.

In C geht das allerdings nicht, darum hat so etwas IMHO in einem C-Buch nichts verloren.

Geschrieben

hmm da dieses Buch aber 'Programmieren in C' heißt müsste der Autor ja auch nen C compiler benutzt haben... damit sollte so eine Lösung wohl nicht vorkommen... Komisch Komisch...

Danke dir weiß ich ja nun zum glück was sache ist ;)

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...