Variablen in C umwandeln!

Timmnay

Grünschnabel
Vorab - das ist mein "Erstlingsthread" man verzeihe mir bitte Fehler, welche ich hoffentlich garnicht erst machen werde :-)

Also folgendes Problem:

Ich habe ein Programm, welches Textdatein einliest und diese auch wieder unter einem anderm Dateinamen, der vorher festgelegt wurde, speichert.
Nun will ich jedoch zusätzlich eine Ausgabe der Textdatei auf den Bildschirm!
Im Prinzip einfach - bloß für das einlesen wird eine Int-Variable genutzt welche mir, so ich sie dann auf dem Bildschirm ausgebe, nur Zahlen (ich mutmaße einmal, das dass die in ASCII-Code aufgelöste Textdatei ist) anzeigt.


Lange Rede - garkein Sinn:

Ich bräuchte nun einen Befehl, welcher es mir ermöglicht, die Int-Varibale mit den (mutmaßlichen) ASCII-Code in eine Char-Variable mit Buchstaben (also den eig. Inhalt der Textdatei) umzuwanden!

Ich hoffe mir ist zu helfen!

Bin für alle Tipps und Lösungsansätze offen und mehr als dankbar!

MfG Timmay
 
Zuletzt bearbeitet:
Hallo Timmnay,

kannst du mal bitte deinen Codeschnipsel schicken, mit dem du den Inhalt der Datei einliest.

Du liest den Inhalt doch immer in ein bytearray ein.

Sagen wir mal ungefähr so

Code:
..
   char buff[256];
   memset(buff,0,256);
   fread( buff, sizeof( char ), 256, pFile );
   // Dann kannst du den eingelesenen Inhalt z.B. so ausgeben
   printf( "buff = %s\n", buff );
..

Wenn dir das nicht weiterhilft, poste mal deine Zeile, wo du den Inhalt ausliest.

Schönen Gruß,

Peter
 
Vielen dank erst einmal! :)

Hier ist mein kompletter Quellcode,
ich habe das Programm übrigens nur übernommen und als Aufgabe bekommen es zu erweitern!

Ich befüchte das Grundprogramm stammt von einer Buch-CD, muss ich mir da sorgen wegen Copyright machen?

Wenn ja ists sofort wieder verschwunden! :)

#include <stdio.h>

#include <stdlib.h>



int main (void)

{

int c;
char filename[25];

FILE *ifp, *ofp;

printf("Filename der Textdatei ? ");

scanf("%s", filename);

if ( (ifp = fopen(filename, "r")) == NULL )
{

printf("Datei %s nicht gefunden\n", filename);

exit(1);

}

ofp = fopen("out.txt","w");

while ((c = fgetc(ifp)) != EOF)
{

if ((c >= 'A') && (c <= 'Z')) c += 'a' - 'A' ;
printf("%i",c);
fputc(c, ofp);

}

fclose(ifp); fclose(ofp);

return 0;

}
 
Wie ich das Ganze verstehe:

c ist also ein Zahlenwert.

while ((c = fgetc(ifp)) != EOF)
c wird aus der Datei gelesen. Du liest einen Charakter ein, speichert ihn aber als Zahlenwert.

if ((c >= 'A') && (c <= 'Z')) c += 'a' - 'A' ;
Du vergleichst den Zahlenwert c mit einem Charakter. Wenn mich nicht alles täuscht, nimmt der Compiler hierbei eine implizite Typumwandlung vor.

Aber auf alle Fälle gibst du explizit (durch das %i) vor, daß der Wert von c auch als Zahlenwert ausgegeben werden soll.

Mein erster Lösungsversuch würde lauten:
Code:
printf("%c", c);

Übersetzt: Gebe den Wert von c (welcher ein Zahlenwert ist) als Zeichen (ASCII-kodiert) aus. Sicher kann dir da auch die Hilfe zu deiner IDE Aufschluß darüber geben.
 
Hi,

IGITT, das Prog liest ja echt byteweise die Datei aus :-)

Also das Programm, so wie es ist, liest jeweils ein char und speichert es in einer int variable.

Du kannst dieses Zeichen dann folgendermaßen ausgeben :

printf("%c",(char)c); // %c steht für ein einzelnes char

Mit %i gibst du den numerischen Wert des ASCII zeichens aus, welches du gerade gelesen hast.

Aber du solltest den Mechanismus unbedingt umschreiben, so dass du nicht mehr byteweise, sondern kilobyteweise die Datei liest und schreibst.

Viel Spaß,

Peter
 
Vielen vielen Dank! :-)

Die Lösungen haben funktioniert!

Ich bin euch beiden unheimlich dankbar, saß da schon ne ganze Weile dran zu knabbern! :)

Jetzt läufts wie gewünscht!

Danke nochmals

MfG Tim
 
@Timmnay: C++-Code kannst du mit [ cpp ] Code... [ /cpp ] eingeben (ohne die Leerzeichen zwischen [ bzw. ] und Text sieht das dann so aus: )
C++:
Code...
oder z. B.
C++:
int main()
{
     int x=5;
     int y=x/0;
     return 0;
}
Die TAB-Taste funktioniert dabei nicht, du musst zum Einrücken also ca. 5-mal Leertaste drücken;)

Edit: Ach so, tschuldigung, hier geht es ja um C:-(, also [ c ] Code... [ /c ] ohne Leerzeichen ergibt:
C:
Code...
 
Zuletzt bearbeitet:
Zurück