Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

1

13.11.2011, 18:40

Einfache Fehlerabfrage

Hallo, hab mal um ein bischen mit den Eigenheiten der Sprache zu spielen,
ein kleines C-Programm geschrieben, namens Zahlenraten (Ja, ich weiß, sehr innovativ ;))

Hier mal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
/************************************************************************/
int main(void)
{
   unsigned i, n, init, temp, rc;

   do
   {
        printf("Geben Sie eine Zahl groesser 0 ein: ");
        rc = scanf("%u", &init);        
        if (rc != 1 || rc < 0) 
        {
            printf("Falsche Eingabe!\n");
        }
    } while (rc < 0);
    
    srand ( time(NULL) );               /* Sonst ist die gesuchte Zahl immer gleich ;)*/
    n = rand() % rc;
    i = 0;
    
    do
    {
        printf("Raten Sie, welche Zahl gesucht wird!\n");
        printf("Geben Sie eine Zahl zwischen 0 und %d ein: ", rc);
        scanf("%u", &temp);
        i++;
        if (temp < n)
        {
            printf("Die gesuchte Zahl ist groesser!\n");
        } 
        else if (temp > n)
        {
            printf("Die gesuchte Zahl ist kleiner!\n");
        }
    } while (temp != n);
    
    printf("Korrekt, Sie haben die gesuchte Zahl nach %d zuegen gefunden!\n", i);
    
    system("PAUSE");
    
    exit(0);
}


Das Programm funktioniert so weit, nur leider habe ich keine Ahnung warum er
diese einfachen Fehlerabfragen nicht bedenkt und auch nicht checkt^^
Ich kann nach wie vor Buchstaben und Zahlen < 0 eingeben ;)

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

2

13.11.2011, 19:00

scanf verhindert nicht dass ungünstige Tastendrücke angenommen werden, dafür musst du schon selbst sorgen. Ich weiß grade nicht obs da bessere gibt, aber ich würde spontan an sowas denken:

Mit getchar das nächste Zeichen einlesen und wenn der keycode nicht dem gewünschten entspricht die Cursorposition zurücksetzen und die Eingebe nochmals durchführen. Wenn Enter gedrückt wurde, alle eingegebenen zeichen zusammen setzen und in ein Integer umwandeln.

Für das alles gibt es die entsprechenden Funktionen.

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

3

13.11.2011, 19:20

Ich prüfe doch hier:

C-/C++-Quelltext

1
2
3
4
 if (rc != 1 || rc < 0)          
{
 printf("Falsche Eingabe!\n");
 }


nicht bei scanf

4

13.11.2011, 19:48

Solltest du dann nicht init testen?

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

5

13.11.2011, 20:01

Ich hatte es davor auch erfolglos mit init getan ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

13.11.2011, 20:11

Die Variablen sind doch alle unsigned. Wie sollen sie da negativ sein?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

13.11.2011, 20:13

Zitat von »http://www.cplusplus.com/reference/clibrary/cstdio/scanf/«


Return Value
On success, the function returns the number of items successfully read.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

13.11.2011, 20:16

Wollte ich auch grad schicken;)
http://www.win-tux.de/c_005_002.htm

Hier findest du noch ne deutsche Beschreibung mit nen paar Beispielen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

13.11.2011, 20:16

Du möchtest, dass sie so nahe wie möglich dran ist. Rechne alles hoch und schau ob es bei der nächsten nicht noch Näher ist. Mit einer Differenzüberprüfung ließe sich das ganz gut machen.
Im Grunde also nicht schwer, am besten machst du dir einen Buffer und speicherst dort immer den momentanen Wert rein, der am nächsten an der gewünschten Zahl dran liegt.
Dann musst du noch schauen ob die Differenz gleich ist, auch dann abbrechen und beide Zahlen ausgeben, das wäre aber Optimierungssache. - Wobei das recht selten ist. ;]
Ich hab mir mal erlaubt nicht so in den Syntax zu gucken, doch mir viel auf, dass deine Variablen unsigned sind. Warum murrst du also mit Negativ herum? :'P

MfG
Check

Lyb

Frischling

  • »Lyb« ist der Autor dieses Themas
  • Private Nachricht senden

10

13.11.2011, 20:20

Bisher hat noch keiner meine Frage beantwortet^^
Wieso kann ich negative Zahlen ohne die Ausgabe "Falsche Eingabe" machen obohl ich
im if Statement frage: eingabe < 0;

Und ich rede dabei nicht von rc = scanf("bla", &bla);
sondern von scanf("bla", &bla); und dann die Prüfung von
der variable bla. Denn da steht jetzt schließlich die eingegebene Zahl drin.

C-/C++-Quelltext

1
2
3
4
if(bla < 0)
{
    printf("Falsche Eingabe");
}

Werbeanzeige