Funktion in einer .txt-Datei ausführen

eule

Grünschnabel
Hi,
hätte ne kurze, sicherlich sehr leichte Frage die mir gerade Kopfzerbrechen bereitet...
Hier meine Funktion:
Ich will ein Histogramm erstellen, so dass für 3% 3x "zeichen" (***) ausgegeben werden..

Code:
 char histogramm(int zeichen, int prozentwert){ //zeichen = das zu malende Zeichen, in meinem Fall der Stern "*"; prozentwert ist ein errechneter Wert, von 0-100
     int i;
     for(i=0;i<prozentwert;i++)
     printf("%c",zeichen);
                                 }
Soweit so gut, in der printf - Ausgabe funktioniert es, in der fprintf-Ausgabe kriege ich int prozentwert als char-Zeichen ausgegeben, bsp 40% gibt er mir als "(" aus = ascii-wert...
Code:
                               for(i2=0;i2<26;i2++){
printf("%c/%c in Datei = %3i _ %2i%% _ ",buchstabe_gross+i2,buchstabe_klein+i2,alphabet[i2],alphabet[i2]*100/nettobuchstaben);

histogramm('*',alphabet[i2]*100/nettobuchstaben);
printf("\n");
fprintf(ptr_datei,"Anzahl %c/%c in Datei = %3i und %2i%%\n",buchstabe_gross+i2,buchstabe_klein+i2,alphabet[i2],alphabet[i2]*100/nettobuchstaben);

fprintf(ptr_datei,"%c \n",histogramm('*',alphabet[i2]*100/nettobuchstaben)); //ohne diese letzte zeile funktioniert die konsolenausgabe, mit dieser zeile wird die Konsolenausgabe zerschossen (es wird 2x "gemalt") und in der txt-Ausgabe bekomm ich nur wieder das char-Zeichen vom prozentwert ausgegeben

Wäre euch sehr dankbar wenn ihr mir sagen könntet wo der fehler liegt...
 
Hi.

Der Compiler sollte dich eigentlich schon darauf aufmerksam gemacht haben, dass du in der histogramm Funktion keinen Wert zurückgibst. (wenn nicht, schalte die Warnungen deines Compilers ein).

Du verwendest allerdings den Wert der histogramm Funktion bei der Ausgabe - dadurch wird ein zufälliges Zeichen ausgegeben.

Schreibe doch deine histogramm Funktion nach folgendem Muster:
C:
void histogramm(char fill, FILE* out, int percent);
In der Funktion verwendest du gleich fprintf und wenn du eine Ausgabe auf der Konsole machen willst, übergibst du als 2. Parameter einfach stdout.

Gruß
 
Vielen vielen Dank deepthroat, besser hätte man es echt nicht (er)klären können:)
Code:
     void histo(char fill, FILE*out, int percent){
          int i;
          for(i=0;i<percent;i++){
                                 fprintf(out,"%c",fill);
                                 }
          }

Funktioniert einwandfrei...

Mein Compiler hat mir übrigens keine Warnung rausgegeben, wegen dem "char histogramm".. Hatte es zunächst als void, hatte aber nicht funktioniert, da ich es direkt in der printf-Funktion angewendet hab... wie sagt man so schön, aus Fehlern lernt man ;)
 
Zuletzt bearbeitet:
Zurück