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



  • @itbeja

    fscanf_s ist kein 1:1 Ersatz für fscanf.
    Das erwartet mehr Parameter.

    Aber auch für fscanf sind die Formatspecifer oder die Parameter falsch.

    Lies die Referenz zu fscanf_sdurch.
    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!