Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » getchar();

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 <
000
19.05.2004, 22:23 Uhr
ethan_hunt



Also da ich C erlerne und das tut von http://pronix.de nutze um einen Einstieg zu bekommen, komme ich an einer Stelle nicht weiter

Wo getchar(); steht, funzt es nicht, es lässt sich wunderbar kompilieren "gcc -o NAME DATEI.c" und auch ausgeführt. Alles hat bis jetzt hingehauen, aber wenn ich z.b. die 2 Zahl mal falsch mache, und der neue versuch kommt, zählt die ENTER eigabe als zeichen und das prog wird beendet.

das getchar() ist doch dafür da, den Puffer zu leeren oder verstehe ich das falsch?

Danke für eure hilfe


C++:
#include <stdio.h>

int main()
    {
    int a,b,check;        // a b und check als ganzzahlen definieren
    
    printf ("Gib 2 Zahlen ein : ");
    check = scanf("%d %d",&a,&b);    // 2 eingaben auslesen und in a und b speichern
    getchar();
    printf("Check = %d \n",check);    // Eingabe checken, als Wert muss 2 rauskommen
    
    if(check == 2)
        {
        printf ("Beide Zahlen sin korrekt : %d und %d \n",a,b);
        }
    else if (check == 1)
        {
        printf ("Die 2 Zahl ist keine Zahl...\n");
        printf ("Versuche es nochmal mit einer neuen Zahl : ");
        check = scanf ("%d",&b);
        getchar();
        printf ("Check = %d\n",check);
        }
    else
        {
        printf ("*************************************************\n");
        printf ("Mann!!! \n");
        printf ("Entweder ist die 1 oder beide Zahlen sind falsch\n");
        printf ("*************************************************\n");
        }

    return 0;
    }


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.05.2004, 22:29 Uhr
Pablo
Supertux
(Operator)


Was meinst du mit die 2 Zahl mal falsch mache[n]? Wozu die getchar() nach den scanfs?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.05.2004, 22:31 Uhr
ethan_hunt




Zitat:
Pablo postete
Was meinst du mit die 2 Zahl mal falsch mache[n]? Wozu die getchar() nach den scanfs?



getchar(); iz klar, soll den buffer leeren, das wenn ich bei der ersten eingabe ( 2 zahlen mit leerzeichen) und als 2 z.b. nen buchstaben eintippe, soll er mir nochnen versuch geben, da drück ich enter, und peng das enter zählt als 2 versuch....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.05.2004, 22:36 Uhr
Pablo
Supertux
(Operator)


Wieso benutzt du nicht fgets? So kann man sich das Leeren ersparen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.05.2004, 22:48 Uhr
ethan_hunt



öööhhhmmmm


fgets?

kannste das kurz mal erläutern?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.05.2004, 22:57 Uhr
Pablo
Supertux
(Operator)



bash:

$ man fgets




Zitat:

#include <stdio.h>
...
char *fgets(char *s, int size, FILE *stream);



Mit fgets kannst du die ganze Zeile lesen, egal ob du Zahlen und String mischt und so. Dann kannst du sprintf benutzen.


C++:
void foo()
{
    char x[120];
    printf("Geben sie etwas ein: ");
    fegts(x,120,stdin);
    // nun hat x den Inhalt von den ersten 119 Zeichen
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.05.2004, 14:38 Uhr
0xdeadbeef
Gott
(Operator)


Genaugenommen ist in x dann eine Zeile, aber höchstens 119 Zeichen (um Buffer overflows zu vermeiden). In diesem Fall ist das Problem aber nicht, dass noch das newline im stream wäre - das würde nicht weiter stören - sondern, dass sich die eingegebene, falsche Zahl ebenfalls noch dort befindet. Versuchs mal so:

C++:
#include <stdio.h>

int main()
{
  int a, b, check;

  printf("Gib 2 Zahlen ein : ");
  check = scanf("%d %d", &a, &b);
  printf("Check = %d\n", check);

  if(check == 2){
    printf("Beide Zahlen sin korrekt : %d und %d \n", a, b);
  }
  else if (check == 1){
    puts("Die 2 Zahl ist keine Zahl...");
    printf("Versuche es nochmal mit einer neuen Zahl : ");
    check = scanf ("%*[^\n]\n%d", &b);
    printf("Check = %d\n", check);
  }
  else{
    puts("*************************************************\n"
         "Mann!!!\n"
         "Entweder ist die 1 oder beide Zahlen sind falsch\n"
         "*************************************************");
  }

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.05.2004, 15:17 Uhr
Pablo
Supertux
(Operator)


[^\n], hab nicht daran gedacht
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: