» Fehlermeldung beim Einlesen eines Buchstabens mit scanf

TXT in BIN ?Neuen Thread eröffnenNeue Antwort erstellenInformatik 1+2 Klausur
AutorNachricht
Beobachter 
Anmeldedatum: 12.02.2021
Beiträge: 1
12.02.2021, 11:55
zitieren

hi, ich habe ein problem in meiner Funktion "Spaltenabfrage"...
wenn ich ungültige Zahlen eingebe, ist es kein Problem, da spuckt er schön brav die Fehlermeldung aus.

Wenn ich jetzt allerdings nen Buchstaben statt ner Zahl einlese, kommt ne endlose Fehlermeldung und das Programm lässt sich nicht mehr stoppen. Wie kann ich das in die Schleife mit einbauen? Bin schon seit Stunden am tüfteln... :wall:



#include <stdio.h>
#include <string.h>
 
 
/*  Symbole: 'o' = Stein Spieler 1
 *           'x' = Stein Spieler 2
 *           'O' = Vierer-Reihe Spieler 1
 *           'X' = Vierer-Reihe Spieler 2
*/

char Spielfigur[] = {' ', 'o', 'x', 'O', 'X'};
 
int Zeilen = 6; int Spalten = 7;
int Feld[6][7];
 
 
// Spielbrett anzeigen
void spielbrett_anzeigen() {
  int i,j;
 
  printf("\n");
  printf("\t ");
  for (j=1; j<=Spalten; j++){
    printf(" %d", j);
  }
    printf("\n");
 
  for (i=0; i<Zeilen; i++) {
    printf("\t%d ",i+1);
for (j=0; j<Spalten; j++){
  printf("%c ", Spielfigur[Feld[i][j]]); //Anzeige des gesetzten Spielsteins
}
printf("\n");
  }
  printf("\n");
}
 
// Spielstein in Spalte versenken
int stein_setzen(int spieler, int column) {
  int row;
   
  for (row=0; row<Zeilen; row++){
    if (Feld[row][column-1] > 0) {break;}
  }
 
  if (row == 0) //ganze Spalte voll
    return 0;
 
  Feld[row-1][column-1] = spieler; // gesetztes Feld
return 1;
 
}   


 // Spaltennummer vom Spieler abfragen
int spaltenabfrage(int spieler) {
    int column;
    int eingabewert = 0;
     
    while (!eingabewert){
printf("Spieler %d setzt Spalte (1-%d): ", spieler, Spalten);
        scanf("%i",&column);

if (column < 1 || column > Spalten){ //Gültigkeitsprüfung
printf("Ungültige Spaltennummer.\n");
} else {
eingabewert = 1;
}
}   
    return column;   
}


// Vierer-Reihe markieren
void reihe_markieren(int zeile, int spalte, int richtung1, int richtung2) {
  int i;
   
  for (i=0; i<4; i++){
    Feld[zeile+i*richtung1][spalte+i*richtung2] += 2; //hochzählen innerhalb des Spielfigur-Strings
  }
}
 
 
// Vierer-Reihe suchen
int gewinnabfrage(int spieler) {
  int i, j;
     
  // Suche waagrecht   
  for (i=0; i<Zeilen; i++){
for (j=0; j<Spalten-3; j++){
if (Feld[i][j]   == spieler && Feld[i][j+1] == spieler &&   
            Feld[i][j+2] == spieler && Feld[i][j+3] == spieler ) {
  reihe_markieren(i, j, 0, 1);
  return spieler;
}
}
  }
   
  // Suche senkrecht   
  for (j=0; j<Spalten; j++){
for (i=0; i<Zeilen-3; i++){
if (Feld[i][j]   == spieler && Feld[i+1][j] == spieler &&
            Feld[i+2][j] == spieler && Feld[i+3][j] == spieler ) {
          reihe_markieren(i, j, 1, 0);
          return spieler;
}
}
  }
 
  // Suche diagonal '\'   
  for (i=0; i<Zeilen-3; i++){
for (j=0; j<Spalten-3; j++){
if (Feld[i][j]     == spieler && Feld[i+1][j+1] == spieler &&
            Feld[i+2][j+2] == spieler && Feld[i+3][j+3] == spieler ) {
  reihe_markieren(i, j, 1, 1);
          return spieler;
}
}
  }

  // Suche diagonal '/'
  for (i=0; i<Zeilen-3; i++){
for (j=Spalten-4; j<Spalten; j++){
if (Feld[i][j]     == spieler && Feld[i+1][j-1] == spieler &&
            Feld[i+2][j-2] == spieler && Feld[i+3][j-3] == spieler ) {
  reihe_markieren(i, j, 1, -1);
          return spieler;
}
}
  }
  return 0;
}
 

     
int main() {
    int steine = (Zeilen * Spalten);
    int column, spieler, gewinner;

printf("\t ******VIER-GEWINNT*******\n\n");
    printf("\t Spieler 1: '%c'\n", Spielfigur[1]);
    printf("\t Spieler 2: '%c'\n", Spielfigur[2]);
   
    spielbrett_anzeigen();
   
spieler = 1;
    while (1) {
column = spaltenabfrage(spieler);
        if (stein_setzen(spieler, column)){
steine--;
} else { 
printf("Kein freier Platz in Spalte %d.\n", column);
{continue;}
}
       
gewinner = gewinnabfrage(spieler);
       
spielbrett_anzeigen();

        if (gewinner > 0) {
printf("Gewinner ist Spieler %d.\n", gewinner);
{break;}
        } 
       
if (steine == 0) {
printf("Alle Steine sind gesetzt.\n");
{break;}
        }

        //Spielerwechsel
if (spieler == 1) {
spieler = 2;
} else {
  spieler = 1;
}
    }
    printf("\t**GAME OVER**\n");
    return 0;
}


pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52420
Wohnort: Lohmar


Meine eBay-Auktionen:
28.02.2021, 12:13
zitieren

Ich weiß jetzt nicht wo du wie Buchstaben eingibst, aber in
scanf("%i",&column);
steht das "i" für Integer, also eine Zahl. Wäre column nun ein Buchstabe, dann ergäbe das entsprechend 0 und die Bedingung
if (column < 1
schlägt an.

Der gesamte Block ist für mich aber auch gerade nicht einleuchtend:
    while (!eingabewert){
printf("Spieler %d setzt Spalte (1-%d): ", spieler, Spalten);
        scanf("%i",&column);

if (column < 1 || column > Spalten){ //Gültigkeitsprüfung
printf("Ungültige Spaltennummer.\n");
} else {
eingabewert = 1;
}
}

Wenn column 0 oder zu groß isst, dann kommt der doch niemals aus der while-Schleife raus oder nicht?


 1x  bearbeitet
pn email
Gast 
28.02.2021, 12:13
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Fehlermeldung beim Einlesen eines Buchstabens mit scanf" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
HILFE beim einlesen in C
hallo und zwar möchte ich einzelne buchstaben einlesen jedoch klappt es für meinen zweiten buchtstaben nicht mehr das programm überspringt immer mein scanf, weiß jemand wieso und wie man das ansonsten machen...
[C]von dsquared2
3
177
01.05.2023, 14:02
Guiseppe
Fehlermeldung beim Einbinden von Bildern
Hallo Forum. Ich habe ein Problem bei meinem Wiki (MediaWiki Version 1.24.3). Wenn ich in einen Artikel ein Bild einbinde und diese Seite dann speichern will, kommt folgende Fehlermeldung: &#91;25b74344&#93; 2015-11-22...
von Kinoko
0
97
22.11.2015, 15:18
Kinoko
Scanf Problem
Hallo, wenn ich mit der scan Funktion mehrere daten scanne und sie dann kompakt aneinander reihen möchte, was muss ich dafür tun? ich beginne gerade c zu lernen und komme da nicht weiter. ich möchte 3 verschieden scans zu einem "Code" aus...
[C]von pkle
1
166
09.06.2022, 13:30
steinsgate
Hilfe beim Kauf eines FR-V
Hallo Alle zusammen. Bin neu hier. Habe am Freitag beim Händler den FR-V (Diesel) näher angesehen und werde nächste Woche eine Probefahrt machen. Habe ein paar Fragen an die Fachleute. 1. Das 2007 Modell bietet wenn ich richtg gelesen habe,...
von Alerbe
3
1.271
14.10.2006, 13:44
Alerbe
Hilfe beim Kauf eines CRX del sol
Moin, moin! So fahre zur zeit einen Peugeot 206 1,1L. :cry: Jetzt möchte ich zu den Träumen der Power umsteigen. Schwärme von einem Honda CRX del sol. Bj. 93/94 1,6L ESI mit 125 PS :drive: . Was haltet ihr von dieser Überlegung? Ich habe keine...
von Kev
1
1.026
13.06.2005, 10:13
mgutt
Hlfe beim Kauf eines EP1's
Hallo zusammen, möchte mir in nächster Zeit einen Honda Civic EP1 in der Sport Version kaufen. Jetzt würd ich gern wissen was die so wert sind. Ich find im Internet Preise von 7000-10000 Euro. Möchte nicht mehr als 8000 ausgeben. Zudem sollte er...
von WolleXPC
15
583
02.09.2008, 20:27
*iceman
Probleme beim erstellen eines Artikels
Hallo, Ich bin recht neu hier und hebe vor kurzem mein erstes MediaWiki erstellt. Leider kann Ich keine Artikel erstellen da Ich die Funktion nicht finden kann. Im Register auf der Linken Seite fehlen Einträge wie "Artikel erstellen" o.ä. wie...
von Philipp87
1
155
16.11.2012, 07:12
carchaias
Auf was muss man achten beim Kauf eines EM2???
Hey leute, ein kumpel will sich ein EM2 kaufen und ich als erfahrener Honda fahrer soll ihm dabei helfen (hab ihn mit der Honda sucht angesteckt :D). Vor der besichtigung müsst ich einiges übers modell erfahren, da ich bis jetzt dieses modell nie...
von aaek3
0
647
28.08.2007, 12:29
aaek3
Hilfe beim Kauf eines Jazz
Hallo liebe HONDA Gemeinde, ich meinen geliebten und treuen HONDA Accord nach mehr als 10 Jahren verkauft und bin nun auf der suche nach einem neuen treuen Weggefährten. In die engere Wahl kommt der HONDA Jazz. Weiß jemand vielleicht wie es so mit...
von Homer J. Simpsons
19
910
11.12.2008, 19:38
nfs_freak
Hilfe beim anschlissen eines wassertemperaturanzeigers
hey leute... will gerne mein zusatzinstrument also ne wassertemperatur anzeige schlissen weis aber nicht wie... wäre klasse wenn mir jemand mal ne bschreibung machen könnte wo was ran soll... es haben bestimmt ja hier mehrere leute solch...
von Lukas.Honda-Civic@Black
11
620
18.05.2008, 20:09
tuning_civic
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |