Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » string mit leerzeichen

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 < [ 3 ]
010
15.12.2003, 18:34 Uhr
lubU




C++:
char frage[100];
FILE *qstns;

qstns = fopen ("wwm.qst", "r");
fgets (frage, 100, qstns);

printf ("%s :", frage);



bekomme da wirre ASCI zeichen ausgegeben.....
in der wwm.qst steht in der ersten Zeile: "Dies ist eine Frage?"

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


In der Zeile

C++:
qstns = fopen("wwm.qst, "r");


fehlt ein Anführungszeichen. Wenn ich das reinsetze, läuft der Code bei mir.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.12.2003, 18:41 Uhr
lubU



hab das " bei mir auch stehen. hab mich nur vertippt.
beim printf krieg ich aber nur komische Ascii zeichen zurück.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
15.12.2003, 19:13 Uhr
0xdeadbeef
Gott
(Operator)


Dann kopier den Code doch mal Zeichen für Zeichen hierher. Der Code, den du auch kompiliert hast - wahrscheinlich ist es irgendein ganz einfacher Flüchtigkeitsfehler.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.12.2003, 19:14 Uhr
Pablo
Supertux
(Operator)



Zitat:
lubU postete
....
und dann

C++:
printf("%s",buffer);

??



wenn du die ganze Zeile mit scanf lesen willst (und mit Leerzeichen), dann tue folgendes:


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



Das sollte funktionieren, habe aber nicht getestet.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
15.12.2003, 19:15 Uhr
lubU



ganzer code:

C++:
int main()
{
    char antwort_user[100], antwort_richtig[100], frage[100];
    int rueckgabewert;
    FILE *qstns;
    qstns = fopen("wwm.qst","r"); /*** .qst = question-datei
                       qstns = questions ***/

    clrscr();

fgets(frage, 100, qstns);
fclose(qstns);
printf("%s : ", frage);
scanf("%s",&antwort_user);
strcpy(antwort_richtig, "test");
rueckgabewert = strcmp(antwort_user,antwort_richtig);
if ( rueckgabewert == 0 )
{
    printf("\n\nrichtig");
}
else
{
    printf("\n\nfalsch");
}
getch();
return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
15.12.2003, 19:17 Uhr
lubU



Ein komisches Ascii zeichen kommt raus, Pablo
Danke aber für den Ratschlag

Dieser Post wurde am 15.12.2003 um 19:18 Uhr von lubU editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
15.12.2003, 19:17 Uhr
Pablo
Supertux
(Operator)


Und an welcher Stelle bekommst du Mist beim Ausgeben?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
15.12.2003, 19:19 Uhr
Pablo
Supertux
(Operator)



Zitat:
lubU postete
Ein komisches Ascii zeichen kommt raus, Pablo
Danke aber für den Ratschlag


Natürlich musst du am Format halten, das heißt, Leerzeichen muss dabei sein. [^\n] heißt, dass man alles bis Zeichen \n lesen muss als String. Und das funktioniert. Aber wenn du die ganze Zeile lesen willst, dann wäre besser fgets zu nehmen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
15.12.2003, 19:23 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab den Code ein bisschen abgeändert, so dass er auch bei mir läuft; im wesentlichen hab ich den ganzen windows-spezifischen Mist rausgeschmissen. Außerdem musst du bei scanf, wenn du einen String einlesen willst, den Buffer nicht noch einmal referenzieren, und ich hab für die richtig/falsch-Geschichte puts genommen, weil es an dieser Stelle sinnvoller ist. So läuft der Code bei mir:

C++:
#include <stdio.h>

int main()
{
  char antwort_user[100], antwort_richtig[100], frage[100];
  int rueckgabewert;
  FILE *qstns;
  qstns = fopen("wwm.qst","r"); /*** .qst = question-datei
                     qstns = questions ***/

  
  fgets(frage, 100, qstns);
  fclose(qstns);
  printf("%s : ", frage);
  scanf("%s", antwort_user);
  strcpy(antwort_richtig, "test");
  rueckgabewert = strcmp(antwort_user,antwort_richtig);
  if ( rueckgabewert == 0 )
    {
      puts("richtig");
    }
  else
    {
      puts("falsch");
    }
  return 0;
}


...auch wenn ich statt scanf auch fgets benutzen würde:

C++:
fgets(antwort_user, 100, stdin);


weil es sicherer ist und gleich eine ganze Zeile einliest.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: