Zugriffsfehler und komische Zeichen beim lesen
-
Hallo zusammen,
habe seit neusten angefangen über Visual Studio C++ zu programmieren.
Kann die Sprache ansich, aber bei Visual Studio gibts so einiges was anders ist.
Bei meinen Programm funktioniert das lesen und schreiben von Datein nicht richtig. Kann mir jemand vllt helfen ?#include "stdafx.h" #include <iostream> #include <string> #include <stdio.h> #include <stdlib.h> #include <random> using namespace std; int iEingabe, iVersuche, iZufallZahl, iZahlEingabe; string sName; string sEingabe; FILE *liste; int main() { iVersuche = 0; iEingabe = 0; iZufallZahl = 0; iZahlEingabe = 0; printf("----------ZAHLENSPIEL----------\n"); begin: printf("\n 1: Spiel | 2: Bestenliste | 3: Setup | 4: Beenden\n"); printf(" Eingabe : "); scanf_s("%i",&iEingabe); if (iEingabe < 5 && iEingabe > 0) { switch (iEingabe) { case 1: iVersuche = 0; iZufallZahl = 0; printf("\nSPIEL\n"); iZufallZahl = rand() % 1000; while (iZahlEingabe != iZufallZahl) { iVersuche++; printf("\n-- Raten Sie die generierte Zahl --\n"); printf(" %i.Versuch : ",iVersuche); scanf_s("%i",&iZahlEingabe); if (iZahlEingabe > iZufallZahl) { printf(" Die generierte Zufallszahl ist kleiner\n"); } if (iZahlEingabe < iZufallZahl) { printf(" Die generierte Zufallszahl ist groesser\n"); } if (iZahlEingabe == iZufallZahl) { printf("\n Ihre Eingabe : %i\n",iZahlEingabe); printf(" Die generierte Zufallszahl : %i\n",iZufallZahl); printf(" Sie haben %i. Versuche gebraucht\n", iVersuche); printf("\n Geben Sie Ihren Namen ein : "); scanf_s("%s", &sName); fopen_s(&liste,"bestenliste.txt", "r+"); fprintf_s(liste, "%s %i", sName, iVersuche); fclose(liste); goto begin; } } break; case 2: printf("\nBestenliste\n"); fopen_s(&liste, "bestenliste.txt", "r"); //while (liste != EOF) { fscanf_s(liste, "%c %i", sName, iVersuche); printf_s(" %s %i\n", sName, iVersuche); //} fclose(liste); goto begin; break; case 3: printf("\nSetup\n"); printf(" Bestenliste wirklich loeschen ?\n j=ja,n=nein\n"); scanf_s("%s", &sEingabe, 1); if(sEingabe == "j"){ fopen_s(&liste, "Bestenliste.txt","w"); fclose(liste); printf("\n Bestenliste geloescht\n"); } goto begin; break; case 4: printf("\nSpiel wird beendet\n"); system("PAUSE"); return 0; } } else { printf("\n---FALSCHE EINGABE---\n\n"); goto begin; } }
Mit freundlichen Grüßen
itbeja
-
fscanf_s
ist kein 1:1 Ersatz fürfscanf
.
Das erwartet mehr Parameter.Aber auch für
fscanf
sind die Formatspecifer oder die Parameter falsch.Lies die Referenz zu
fscanf_s
durch.
Ob da ein Formatspecifier für std::string drin ist, bezweifele ich.Im übrigen kannst du auch die nervige Warnung bei Benutzung von
fscanf
abschalten.Die C-Header stdio.h sind veraltet.
Lass das goto sein. Dafür gibt es keinen vernünftigen Grund
Bei Windows zwar egal, aber überprüfe deine Dateinamen.
-
std::cin >> Eingabe
usw.
-
scanf_s("%s", &sName);
wie soll das funktionieren?std::cin >> sName
!