Forum: Compiler & IDEs Abbruchbedingung wird mit Scanf nicht erfüllt.


von Braunweissgruen (Gast)


Lesenswert?

Moin Moin liebe Gemeinde,

wenn ich Scanf benutze dann übersieht er das Abbruchkriterium.
Wenn ich Scanf auskommentiere und das auskommentierte Scanf ++ benutze, 
dann funktioniert es wie gedacht.
Mit dem scanf jedoch fragt er mich unendlich viele Spielzüge ab.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
5
#define xMax 3
6
#define yMax 3
7
#define SpielzugMax 9
8
9
void Spielfeld_Aus(void);
10
void Spielfeld_Erstellen(void);
11
char Spielfeld[xMax][yMax];
12
13
int main()
14
{
15
    uint8_t xPos;
16
    uint8_t yPos;
17
    uint8_t A_S=0;
18
    uint8_t Spielzug;
19
    uint8_t SpielzugCnt=0;
20
21
    Spielfeld_Erstellen();
22
    Spielfeld_Aus();
23
24
    while (SpielzugCnt < 9)
25
    {
26
        printf("Spieler 1 Spielzug wählen 1-9\n");
27
        scanf("%i",&Spielzug);//Hier ist das Scanf
28
        //Spielzug++;
29
        SpielzugCnt ++;
30
31
        switch(Spielzug)
32
        {
33
            case 1: Spielfeld[0][0]='O'; break;
34
            case 2: Spielfeld[1][0]='O'; break;
35
            case 3: Spielfeld[2][0]='O'; break;
36
            case 4: Spielfeld[0][1]='O'; break;
37
            case 5: Spielfeld[1][1]='O'; break;
38
            case 6: Spielfeld[2][1]='O'; break;
39
            case 7: Spielfeld[0][2]='O'; break;
40
            case 8: Spielfeld[1][2]='O'; break;
41
            case 9: Spielfeld[2][2]='O'; break;
42
        }
43
        Spielfeld_Aus();
44
45
        printf("Spieler 2 Spielzug wählen 1-9\n");
46
        //scanf("%i",&Spielzug);
47
        Spielzug++;
48
        SpielzugCnt ++;
49
50
        switch(Spielzug)
51
        {
52
            case 1: Spielfeld[0][0]='X'; break;
53
            case 2: Spielfeld[1][0]='X'; break;
54
            case 3: Spielfeld[2][0]='X'; break;
55
            case 4: Spielfeld[0][1]='X'; break;
56
            case 5: Spielfeld[1][1]='X'; break;
57
            case 6: Spielfeld[2][1]='X'; break;
58
            case 7: Spielfeld[0][2]='X'; break;
59
            case 8: Spielfeld[1][2]='X'; break;
60
            case 9: Spielfeld[2][2]='X'; break;
61
        }
62
        Spielfeld_Aus();
63
    }
64
65
    system("Pause");
66
67
    return 0;
68
}
69
70
71
void Spielfeld_Erstellen(void)
72
{
73
    uint8_t xPos=0;
74
    uint8_t yPos=0;
75
76
77
    while(yPos < yMax)
78
    {
79
        while(xPos < xMax)
80
        {
81
            Spielfeld[xPos][yPos]='u';
82
            xPos++;
83
        }
84
        xPos=0;
85
        printf("\n");
86
        yPos++;
87
    }
88
}
89
90
91
void Spielfeld_Aus(void)
92
{
93
    uint8_t xPos=0;
94
    uint8_t yPos=0;
95
96
97
    while(yPos < yMax)
98
    {
99
        while(xPos < xMax)
100
        {
101
            printf("%c",(Spielfeld[xPos][yPos]));
102
            xPos++;
103
        }
104
        xPos=0;
105
        printf("\n");
106
        yPos++;
107
    }
108
}

Mit freundlichen Grüßen

Braunweissgruen

von tictactoe (Gast)


Lesenswert?

Braunweissgruen schrieb:
>     uint8_t Spielzug;
> ...
>         scanf("%i",&Spielzug);//Hier ist das Scanf

%i verlangt einen Zeiger auf int. Nicht uint8_t, nicht unsigned int oder 
sonstwas. int.

Hat der Compiler dich nicht gewarnt?

von Florian L. (braunweissgruen)


Lesenswert?

Moin,

vielen Dank für die fixe Antwort.
Nein, der Compiler hat nicht gewarnt (mingw-gcc)
Ich probiere es mal aus.

Grüße

Editiert:
Hat geklappt, Danke!

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

Florian Littig schrieb:
> Nein, der Compiler hat nicht gewarnt (mingw-gcc)

wenn Du ihn mit -Wall darum bittest, macht er das.

von DirkB (Gast)


Lesenswert?

Du kannst auch "%hhu" als Formatspecifier für uint8_t nehmen.
Besser noch "%"SCNu8

von J. T. (chaoskind)


Lesenswert?

oder die Warnung ist dem Wust an unused variables Warnungen 
untergegangen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.