Programm liefert keine Ausgabe

Schnelle objektorientierte, kompilierende Programmiersprache.
DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Programm liefert keine Ausgabe

Beitrag von DANrulz81 » Mi Jan 04, 2012 6:58 pm

Hallo zusammen,

bei folgendem Code bekomm ich keine Ausgabe:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int i;
    char buchstabe[]="Das ist ein Test";
    char *zeiger=NULL;
    char ende='\0';

    zeiger=&buchstabe[0];

    for(i=0;i!=ende;i++)
        printf("\nBuchstabe %2i:\t %c",i+1,*zeiger++);
    return 0;
}
Wenn ich für i eine Zahl einsetze klappt das, ich möchte aber alles ausgeben, bis das Stringende (\0) erreicht ist. Irgendwie komm ich nicht drauf, wahrscheinlich hab ich heute zuviel gemacht :?

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Programm liefert keine Ausgabe

Beitrag von Bebu » Mi Jan 04, 2012 7:24 pm

Schau dir mal die for- Schleife noch mal ganz genau an. Tip1: Buchstabe ist nicht terminiert. Tip2 Was hat Buchstabe mit Ende zu tun?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Programm liefert keine Ausgabe

Beitrag von DANrulz81 » Mi Jan 04, 2012 7:34 pm

Bebu, danke für die Hinweise. Allerdings kann ich die nicht ganz nachvollziehen. Das Programm liefert mir meine gewünschte Ausgabe, wenn ich für

Code: Alles auswählen

char ende=16;
Ich möchte ja nur den String solange darstellen, bis dieser zu Ende ist "\0". Irgendwie habe ich das Gefühl, wir reden an einander vorbei. Oder ich hab jetzt wirklich nen Hänger vom ganzen Programmieren heute :shock:

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Programm liefert keine Ausgabe

Beitrag von nufan » Mi Jan 04, 2012 8:13 pm

Bebu hat geschrieben:Schau dir mal die for- Schleife noch mal ganz genau an.
Sehr guter Tipp ^^
Bebu hat geschrieben:Tip1: Buchstabe ist nicht terminiert.
Doch, das macht der Compiler automatisch.
Bebu hat geschrieben:Tip2 Was hat Buchstabe mit Ende zu tun?
Wieder ein guter Tipp ^^

@DANrulz81: Denk nach was '\0' ist und welchen Wert es hat. Überlege den Unterschied zwischen 'i' und 'Buchstabe'. Dann geh die Schleife Schritt für Schritt durch... oder auch nicht ^^ Falls du es dann noch nicht verstehst, starte das Programm mit dem Debugger und geh es Schritt für Schritt durch.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Programm liefert keine Ausgabe

Beitrag von DANrulz81 » Mi Jan 04, 2012 8:50 pm

O.k. Vielen Dank, das war wohl doch zuviel heute. So funktioniert mein Programm:

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    int i;
    char buchstabe[]="Das ist ein Test, der soll zum Testen sein";
    char *zeiger=NULL;
    char ende='\0';

    zeiger=&buchstabe[0];

    for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
    return 0;
}
Ich hoffe, dass das so in Ordnung ist.

Edit: Das mit dem Debuggen würde ich gerne machen, allerdings steige ich bei Code::Blocks nicht so ganz durch, wie das gehen soll. :?:

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Programm liefert keine Ausgabe

Beitrag von Bebu » Mi Jan 04, 2012 8:56 pm

Ja, das Programm sieht fast gut aus. Du könntest dir allerdings den char ende auch noch sparen...
dani93 hat geschrieben:Doch, das macht der Compiler automatisch.
Mhh, danke, das wusste ich gar nicht. Aber ich arbeite auch so gut wie nie mit C-Strings.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Programm liefert keine Ausgabe

Beitrag von nufan » Mi Jan 04, 2012 8:58 pm

DANrulz81 hat geschrieben:

Code: Alles auswählen

    for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
Von solchen Operationen rate ich stark ab. Das Ergebnis ist soweit ich weiß undefiniert, auf jeden Fall ist es falsch. 'zeiger' zeigt bei der 2. Verwendung im printf() nämlich schon auf die nächste Adresse, nicht jene die ausgegeben wurde. Einfacher ist es hier mit 'i' als Index zu arbeiten, dafür hast du die Variable ja auch.
Aber du hast schon mal erkannt wo der Fehler liegt, sehr gut :)
Bebu hat geschrieben:
dani93 hat geschrieben:Doch, das macht der Compiler automatisch.
Mhh, danke, das wusste ich gar nicht. Aber ich arbeite auch so gut wie nie mit C-Strings.
Ist irgendwie logisch, sonst müsste man sogar bei einem printf() die Länge mit angeben:

Code: Alles auswählen

printf( "test-ausgabe" );
Woher sollte printf() ohne \0 wissen wo der String aus ist?

EDIT:
DANrulz81 hat geschrieben:Edit: Das mit dem Debuggen würde ich gerne machen, allerdings steige ich bei Code::Blocks nicht so ganz durch, wie das gehen soll. :?:
Du setzt einen Breakpoint (klick rechts neben eine Zeilennummer) und startest das Programm im Debug-Modus (Debug -> Start). Danach kannst du es mit "Next Instruction" Schritt für Schritt abarbeiten.

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Programm liefert keine Ausgabe

Beitrag von DANrulz81 » Mi Jan 04, 2012 9:34 pm

@dani93:
Super, vielen Dank, allerdings funktioniert das nur, wenn ich es als Projekt bearbeite. Ich öffne immer nur ein File.

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++,zeiger);
Den Zeiger zum Schluss hatte ich nur zu Testzwecken drin.

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++);
So sieht es jetzt aus.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Programm liefert keine Ausgabe

Beitrag von nufan » Mi Jan 04, 2012 9:38 pm

DANrulz81 hat geschrieben:Super, vielen Dank, allerdings funktioniert das nur, wenn ich es als Projekt bearbeite. Ich öffne immer nur ein File.
Hm... möglich, so gut kenne ich CodeBlocks auch wieder nicht :)
DANrulz81 hat geschrieben:

Code: Alles auswählen

for(i=0;*zeiger!=ende;i++)
        printf("\nBuchstabe %2i:\t %c\tAdresse: %p",i+1,*zeiger++);
So sieht es jetzt aus.
Sollte passen, bis auf das überflüssige (und dadurch nicht ungefährliche) %p :) Schöner finde ich aber folgende Lösung:

Code: Alles auswählen

for( i = 0; zeiger[i] != '\0'; i++ )
  printf( "\nBuchstabe %2i:\t %c", i + 1, zeiger[i] );

DANrulz81
Beiträge: 53
Registriert: Fr Dez 23, 2011 9:40 pm

Re: Programm liefert keine Ausgabe

Beitrag von DANrulz81 » Mi Jan 04, 2012 9:43 pm

O.k. Danke. Aber ich lasse es lieber so, da ich da so noch besser durchsteige. So lange programmiere ich noch nicht C.

Antworten