Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string und int kommagetrennt einlesen

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 <
010
18.12.2003, 02:14 Uhr
lubU



ja schon klar. bin ja net blöd.
datei sieht jetzt so aus:

user1 700
user2 500
user3 300


C++:
scanf(hiscore, "%s %d\n", name1, &punkte1);
printf("%s %d", name1, &punkte1);



ausgegeben wird:
user1 -566

daraus schließe ich dass er ein problem hat den integerwert einzulesen.
aber wieso ? die syntax is doch richtig....

// edit:
wenn ich die Zahl auch als string einlese funktionierts wunderbar.
selbe syntax ( %s statt %d natürlich )

Dieser Post wurde am 18.12.2003 um 02:19 Uhr von lubU editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.12.2003, 02:18 Uhr
0xdeadbeef
Gott
(Operator)


Das hier läuft bei mir:

C++:
#include <stdio.h>

int main(int argc, char *argv[]) {
  char names[3][20];
  int punkte[3], i;

  if (argc > 1) {
    FILE *fd = fopen(argv[1], "r");

    for(i = 0; i < 3; ++i) {
      fscanf(fd, "%s %d\n", names[i], &punkte[i]);
      printf("%s %d\n", names[i], punkte[i]);
    }

    return 0;
  } else {
    printf("Datei als Parameter angeben\n");
    return -1;
  }
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.12.2003 um 02:21 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
18.12.2003, 02:20 Uhr
0xdeadbeef
Gott
(Operator)


Ach so, klar. Bei printf musst du punkte1 angeben, nicht &punkte1.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.12.2003, 02:24 Uhr
lubU



ah jetzt endlich !
das & is weg jetzt gehts.
kannste mir auch noch erklären wieso ?

Dieser Post wurde am 18.12.2003 um 02:26 Uhr von lubU editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
18.12.2003, 02:26 Uhr
0xdeadbeef
Gott
(Operator)


Als ersten Parameter solltest du den Namen der Highscore-Datei angeben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
18.12.2003, 02:30 Uhr
lubU



kannste mir auch noch erklären wieso
es jetzt funktioniert ?
also wieso beim printf kein & vor punkte1 muss ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
18.12.2003, 02:39 Uhr
0xdeadbeef
Gott
(Operator)


Klar. Es ist allerdings ein bisschen abstrakt. Wenn du einen Integer anforderst, wird der irgendwo in den Speicher geschrieben. Um den Integer zu ändern, wird an dieselbe Stelle im Speicher ein anderer Wert geschrieben. Das ist das ene. Das andere ist, dass C nur ein call-by-value kennt. Das bedeutet, dass, wenn du einen Parameter an eine Funktion übergibst, dessen Wert an eine andere Stelle im Speicher kopiert und weiterverwendet wird. Wenn der Wert innerhalb der Funktion verwendet wird, ändert sich für den Wert in der aufrufenden Funktion nichts. Nimm zum Beispiel das hier:

C++:
void quadratiert_x_nicht(int x) {
  x = x*x;
}


Diese Funktion verbraucht Rechenzeit, weiter nichts. Das bedeutet, um den Wert einer Variable in der aufrufenden Funktion zu verändern, brauchst du die Adresse der ursprünglichen Variablen, und diese kriegst du mit dem &-Operator. &punkte1 ist die Adresse, an der punkte1 im Speicher steht. Dementsprechend braucht fscanf, weil es den Wert verändern soll, die Adresse, printf aber nur den Wert. Deswegen musst du bei fscanf & benutzen, bei printf aber nicht. Eine andere Sache ist es bei Strings, weil Strings ein Speicherbereich beliebiger Länge sind und von Haus aus immer die Adresse übergeben wird.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
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: