Psycho~zicke Geschrieben 12. Oktober 2007 Geschrieben 12. Oktober 2007 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. } Zitieren
Guybrush Threepwood Geschrieben 12. Oktober 2007 Geschrieben 12. Oktober 2007 Wieso schaust du dir die Werte nicht einfach im Debugger an? Zitieren
Psycho~zicke Geschrieben 12. Oktober 2007 Autor Geschrieben 12. Oktober 2007 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. Zitieren
Klotzkopp Geschrieben 12. Oktober 2007 Geschrieben 12. Oktober 2007 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 ||. Zitieren
Psycho~zicke Geschrieben 12. Oktober 2007 Autor Geschrieben 12. Oktober 2007 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. Zitieren
Guybrush Threepwood Geschrieben 12. Oktober 2007 Geschrieben 12. Oktober 2007 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. Zitieren
Psycho~zicke Geschrieben 12. Oktober 2007 Autor Geschrieben 12. Oktober 2007 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!!! Zitieren
Cold-Fusion Geschrieben 13. Oktober 2007 Geschrieben 13. Oktober 2007 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! Zitieren
Psycho~zicke Geschrieben 15. Oktober 2007 Autor Geschrieben 15. Oktober 2007 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; } Zitieren
Klotzkopp Geschrieben 15. Oktober 2007 Geschrieben 15. Oktober 2007 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 Zitieren
Psycho~zicke Geschrieben 15. Oktober 2007 Autor Geschrieben 15. Oktober 2007 Also ich sollte mir wirklich ein anderes Buch zulegen. Das steht da wirklich so... Und ich hab wirklich angefangen an mir selbst zu zweifeln... Danke schön für deine hilfe Zitieren
Klotzkopp Geschrieben 15. Oktober 2007 Geschrieben 15. Oktober 2007 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. Zitieren
Psycho~zicke Geschrieben 15. Oktober 2007 Autor Geschrieben 15. Oktober 2007 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 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.