Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » String formatiert in txt-datei schreiben (in C)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
17.06.2003, 16:20 Uhr
DIO



Moin leutz

und zwar möchte ich nen string in eine TXT-Datei schreiben. Am Anfang soll noch ne Int-Zahl stehen. Allerdings soll nach jeder Zeile ein Zeilenumbruch erfolgen. Ich habe zwar ne Lösung aber die ist ziemlich scheiße

C++:
char matrikel[10], gebdat[10], dummy[2];
    dummy[0]=0x0d;
    dummy[1]=0x0a;
...
...
fprintf(f, "%d", anz);
fprintf(f, "%c%c", dummy[0], dummy[1]);
for (i=0; i<anz; i++)
{
    _itoa(s[i].matrikelnr, matrikel, 10);
    _itoa(s[i].gebtag, gebdat, 10);
    fputs(s[i].nachname, f);
    fprintf(f, "%c%c", dummy[0], dummy[1]);
    fputs(s[i].vorname, f);
    fprintf(f, "%c%c", dummy[0], dummy[1]);
    fputs(matrikel, f);
    fprintf(f, "%c%c", dummy[0], dummy[1]);
    fputs(gebdat, f);
    fprintf(f, "%c%c", dummy[0], dummy[1]);
}


hat da jemand ne kurzform?? Nebenbei funktioniert nur
fprint(f, "%c%c", dummy[0], dummy[1]);
nicht aber
fputs(dummy, f);
Jemand ne Ahnung??? Sorry blutiger Anfänger

MFG DIO
--
Wie einst ein großer Mathematiker sagte:
Wir müssen wissen - Wir werden wissen

Dieser Post wurde am 18.06.2003 um 08:45 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.06.2003, 16:42 Uhr
~0xdeadbeef
Gast


Wie wärs damit:

C++:
fprintf(f, "%d\n", anz); /* \n == newline */
for(i = 0; i < anz; ++i)
    fprintf(f, "%s\n%s\n%ld\n%ld\n", s.nachname, s.vorname, s.matrikelnr, s.gebdat);
    /* Das %ld steht für lange dezimale ausgabe. Ich nehme an, matrikelnr und gebdat sind longs */

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2003, 17:04 Uhr
DIO



Hmm sieht schon mal richtig gut aus, wußte nicht das man einfach so ein \n einfügen kann. Aber weißt du zufällig auch warum fputs(..) nicht funktioniert hat??

Vielen Dank schon mal bis hierher. Ich glaub wenn du das Proggi siehst was ich geschrieben dann ist es hinterher nur noch halbsolang....

Grins

MFG DIO
--
Wie einst ein großer Mathematiker sagte:
Wir müssen wissen - Wir werden wissen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2003, 17:09 Uhr
DIO



oh nochwas... was sagt ihr zu dieser aufgebohrten Character-Vektor-Eingabe??

C++:
#include <stdio.h>
#include <stdlib.h>

int getline (char s[], int lim)
{
    int l, c;
    for (l = 0; l < (lim - 1) && (c = getchar())!= EOF && c!= '\n'; l++)
        s[l] = c;
    s[l] = '\0';
    fflush (stdin);
    if (l==0 && c==EOF)
        l = EOF;
    return l;
}

int getint (void)
{
    char s[20];
    getline (s, 20);
    return atoi (s);
}

double getdouble (void)
{
    char s[50];
    getline (s, 50);
    return atof (s);
}


--
Wie einst ein großer Mathematiker sagte:
Wir müssen wissen - Wir werden wissen

Dieser Post wurde am 17.06.2003 um 17:27 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2003, 17:13 Uhr
~0xdeadbeef
Gast


fputs hat funktioniert. Allerdings schreibt fputs nur das raus, was im String steht, und hängt nicht automatisch ein newline an.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.06.2003, 17:19 Uhr
~0xdeadbeef
Gast


Na, da doch lieber so:

C++:
char s[100];
scanf("%[^\n]\n", s);


Erklärung: scanf ist sozusagen ein umgekehrtes printf. Der Format-String bedeutet in diesem Fall: Lies einen String, der aus allen Zeichen außer einem newline besteht, nach s ein - also alle Zeichen bis zum ersten newline - und nimm dann noch ein newline-Zeichen aus dem Stream. scanf gibt die Anzahl der Variablen, die es erfolgreich eingelesen hat, zurück. In diesem Fall wäre das idealerweise 1.

Wenn du statt C auch C++ verwenden willst, würde ich dir das hier empfehlen:

C++:
#include <iostream>
#include <string>

//Code...
std::string s;
std::getline(std::cin, s);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.06.2003, 17:27 Uhr
~0xdeadbeef
Gast


Und was getint bzw. getdouble angeht:

C++:
int i;
double d;

scanf("%d", &i); /* getint */
scanf("%lf", &d); /* getdouble */


bzw. in C++:

C++:
#include <iostream>

int i;
double d;

std::cin >> i;  /* getint */
std::cin >> d; /* getdouble */


Nochwas zu cin: Wenn irgendwas bei der Eingabe schief geht, wird bei cin das fail-bit gesetzt. Du kannst das dann per cin.fail() abfragen. Typisch wäre sowas:

C++:
int i;
do {
    cin.clear();  //fail-bit unsetten
    do {
        cin.ignore();
    } while(!cin.eof()); //Stream leermachen.
    std::cout << "Bitte eine Zahl eingeben: ";
    std::cin >> i;
} while(cin.fail());

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.06.2003, 21:37 Uhr
DIO



vielen dank. Gibt nur 2 Probleme:
1. Habe ich absolut keinen Plan von C++,
2. was macht [^\n]????
Trotzdem vielen dank hab das ding mal getestet. Muß mir nur noch über die genauen Unterschiede von deiner und meiner Lösung klarwerden.

MFG DIO
--
Wie einst ein großer Mathematiker sagte:
Wir müssen wissen - Wir werden wissen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.06.2003, 21:48 Uhr
~0xdeadbeef
Gast


Lies das hier: www.opengroup.org/onlinepubs/007908799/xsh/fscanf.html

Die Format Strings sind bei fscanf dieselben wie bei scanf. Die Ausdrücke

C++:
scanf(fmt_string, ...);
/* und */
fscanf(stdin, fmt_string, ...);


sind synonym.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.06.2003, 23:08 Uhr
ao

(Operator)



Zitat:
DIO postete
Aber weißt du zufällig auch warum fputs(..) nicht funktioniert hat??


Weil fputs einen string erwartet, das ist eine Folge von Zeichen, die mit einem Null-Zeichen abgeschlossen ist. Das Null-Zeichen fehlt bei dir.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: