Ich bereauche Hilfe



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • CStoll schrieb:

    Plion schrieb:

    Also C++ meinte der Lehrer noch nicht, leider. Darum muss es C sein. Mein Problem zur Zeit ist ich weiss nicht wie ich aus einer Datei ein Quiz einlesen kann. Was der Befehl ist.

    Ein Quiz am Stück einlesen kannst du mit C nicht - besonders da niemand weiß, was ein "Quiz" sein soll. Du kannst aber die einzelnen Fragen und Antworten mit fgets() (liest eine komplette Zeile) oder fscanf() (mit einer reichlichen Auswahl an Formatierungsmöglichkeiten) einlesen.

    #include "stdafx.h"
    #include <string.h>
    
    int main(int argc, char* argv[])
    {
    	char file[50];
    	char antwort[300];
    
        printf("*******************************************\n");
        printf("***Wilkommen im multiple choice Apruefer***\n");
        printf("*******************************************\n\n\n\n");
    
        printf("Bitte geben sie den Namen der Pruefung ein.\n");
        scanf("%s", &file);
    
        strcat (file, ".txt");
    
        FILE * fp;
            fp = fopen("file", "a");
    
    		while (!feof (fp))
    		{
    		fscanf(fp,"[^\n]\n",&antwort);
    		fprintf(fp,"%s",antwort);
    		}
    }
    

    meins du sowas in der art?



  • Im Prinzip ja - nur solltest du noch etwas Struktur in die Schleife einbringen und zwischendurch auch abfragen, welche Antworten der Anwender gegeben hat.

    (und fopen() verwendet immer noch den falschen Parameter - "w" schreibt in eine neue Datei (löscht notfalls alte Inhalte), "a" schreibt ans Ende einer vorhandenen Datei, "r" liest aus einer vorhandenen Datei)



  • Ok sorry habs vorher vergessen.
    Also ich bin jetzt wieder ein Schritt weiter das Programm zeigt mir jetzt ein normlaes txt file an zu dem hab ich folgenden Quellcode benutzt. Jetzt muss ich was tun das ich auch antworten kann.

    Quellcode :

    #include "stdafx.h"
    #include <string.h>
    
    int main(int argc, char* argv[])
    {
    	char file[50];
    	char antwort[300];
    
        printf("*******************************************\n");
        printf("***Wilkommen im multiple choice Apruefer***\n");
        printf("*******************************************\n\n\n\n");
    
        printf("Bitte geben sie den Namen der Pruefung ein.\n");
        scanf("%s", file);
    
        strcat (file, ".txt");
    	printf("%s", file);
    
    FILE * fp;
            fp = fopen(file, "r");
    
            while (!feof (fp))
            {
            fscanf(fp,"%[^\n]\n",antwort);
            printf("%s",antwort);
            }
    }
    


  • Wie gesagt - strukturier dir erstmal das Textfile mit den Frage und Antworten, z.B. so:

    Frage 1?
    3 2
    erste Antwort
    zweite Antwort
    dritte Antwort
    Frage 2?
    4 1
    erste Antwort
    zweite Antwort
    dritte Antwort
    vierte Antwort
    ...
    

    (die Zahlenpaare nach der jeweiligen Frage geben die Anzahl der Antworten und den Index der korrekten Antwort an)



  • CStoll schrieb:

    Wie gesagt - strukturier dir erstmal das Textfile mit den Frage und Antworten, z.B. so:

    Frage 1?
    3 2
    erste Antwort
    zweite Antwort
    dritte Antwort
    Frage 2?
    4 1
    erste Antwort
    zweite Antwort
    dritte Antwort
    vierte Antwort
    ...
    

    (die Zahlenpaare nach der jeweiligen Frage geben die Anzahl der Antworten und den Index der korrekten Antwort an)

    Das hab ich jetzt. Es zeigt mir aber alle Fragen und Antworten an ich brauch etwas um nun Antworten zu können in dem Programm.
    Es zeigt mir nun nur alle fragen und antworten an.



  • Struktur im Programm:

    • lies die nächste Frage ein und zeige sie an.
    • lies die beiden Zahlenangaben ein (count und korrekt)
    • lies count Zeilen ein und gib sie mit laufender Nummer aus
    • hol dir die Antwort des Nutzers und vergleich sie mit dem Wert in korrekt
      (wenn die Antwort stimmt, erhöhst du den Punktezähler, den du am Ende ausgeben kannst)


  • CStoll schrieb:

    Struktur im Programm:

    • lies die nächste Frage ein und zeige sie an.
    • lies die beiden Zahlenangaben ein (count und korrekt)
    • lies count Zeilen ein und gib sie mit laufender Nummer aus
    • hol dir die Antwort des Nutzers und vergleich sie mit dem Wert in korrekt
      (wenn die Antwort stimmt, erhöhst du den Punktezähler, den du am Ende ausgeben kannst)

    das hab ich alles im struktogramm^^... jedoch kenn ich die C codes für das nicht.



  • Klar kennst du sie - einlesen mit fscanf() (hast du ja oben schon verwendet), Ausgaben mit printf() und Nutzerantworten bekommst du mit scanf() (oder indem du stdin als Datei an fscanf() übergibst).

    (für den dritten Schritt benötigst du eine for()-Schleife)



  • CStoll schrieb:

    Klar kennst du sie - einlesen mit fscanf() (hast du ja oben schon verwendet), Ausgaben mit printf() und Nutzerantworten bekommst du mit scanf() (oder indem du stdin als Datei an fscanf() übergibst).

    (für den dritten Schritt benötigst du eine for()-Schleife)

    EDIT : ok habs jetzt begriffen. Weiss du per zufall wie dann die befehle in der klammer aussehen da hab ich keinen plan aber den sinn begreif ich jetzt



  • printf("1. FRAGE\n");
    	printf("welchen Datentyp kann man fuer ganze Zahlen verwenden? \n1: int\n2: float\n3: double\n\n");
    	scanf("%i", &iAntwort);
    	if( iAntwort == 1)
    

    sowas bringt mir nix ne?



  • Welche Klammer meinst du denn?
    (btw, wenn du die einzelnen Fragen direkt in den Quelltext schreibst, wird dein Programm extrem unflexibel - anstelle des zweiten printf() solltest du die Fragen und Auswahlmöglichkeiten aus der Datei einlesen)



  • #include "stdafx.h"
    #include <string.h>
    #include <io.h>
    #include <direct.h>
    
    int main(int argc, char* argv[])
    {
    char file[50];
    char antwort[300];
    int abbruch = 0;
    long myDir;
    struct _finddata_t dirInfo;
    char suchmuster [101] = "*.txt";
    char dateiname[100][100];
    char frage[100][100];
    char antwort1[100][100];
    char antwort2[100][100];
    char antwort3[100][100];
    char antwort4[100][100];
    char antwort5[100][100];
    int punkte = 0;
    int antworrt;
    int richtigeantwort[100];
    int gelesen;
    int pl = 0;
    int index;
    int i;
    
        printf("********************************************\n");
        printf("***Wilkommen im multiple choice Abpruefer***\n");
        printf("********************************************\n\n\n\n");
    
    FILE * fp;
    while(abbruch != 1){
    	_chdir (".\\"); 
    	myDir = _findfirst(suchmuster, &dirInfo);
    	printf("1 %s\n", dirInfo.name);
    		strcpy(dateiname[1], dirInfo.name);
    		index=2;
    		while(1){
    
     gelesen = _findnext(myDir, &dirInfo);
    if(gelesen == 0) {
    	printf("%i %s\n", index, dirInfo.name);
    		strcpy(dateiname[index], dirInfo.name);
    				index++;
    			}
    	else 			break;}
    
    		_findclose(myDir);
    
    		printf("Wählen sie bitte den Test. ");
    		scanf("%i", &pl);
    		printf("\nDie Datei \"%s\" wird geoeffnet\n", dateiname[pl]);
    
    		fp = fopen(dateiname[pl], "r");
    
    		i=1;
    		while(!feof(fp)){
    			printf("%i ", i);
    			fscanf(fp, "%[^\n]\n", frage[i]);
    
    			fscanf(fp, "%[^\n]\n", antwort1[i]);
    
    			fscanf(fp, "%[^\n]\n", antwort2[i]);
    
    			fscanf(fp, "%[^\n]\n", antwort3[i]);
    
    			fscanf(fp, "%[^\n]\n", antwort4[i]);
    
    			fscanf(fp, "%[^\n]\n", antwort5[i]);
    
    			fscanf(fp, "%i\n", &richtigeantwort[i]);
    
    			printf("%s\n %s %s %s %s %s \n", frage[i], antwort1[i], antwort2[i], antwort3[i], antwort4[i], antwort5[i] );
    			if(antworrt != richtigeantwort[i])
    				printf("Falsch");
    
    			else if (antworrt == richtigeantwort[i])
    			{printf("Richtig!");
    			punkte = punkte + 1;}
    
    			i++;
    		};
    
    		fclose(fp);
    
    		printf("\nMoechten Sie einen weiteren Test bearbeiten? Ja: 0, Nein: 1. Ihre Wahl: ");
    		scanf("%i", &abbruch);
    	}
    	return 0;
    }
    

    so jetzt zeigts mir 1 Fehler an 3 warnungen ich hab kein plan was die sind wenn ich die habe sollte es gehen

    Kompilierung läuft...
    plion.cpp
    C:\Dokumente und Einstellungen\B.i.g. Daddy\Desktop\Projekt Wusel\plion\plion.cpp(14) : warning C4101: 'antwort' : Unreferenzierte lokale Variable
    C:\Dokumente und Einstellungen\B.i.g. Daddy\Desktop\Projekt Wusel\plion\plion.cpp(13) : warning C4101: 'file' : Unreferenzierte lokale Variable
    C:\Dokumente und Einstellungen\B.i.g. Daddy\Desktop\Projekt Wusel\plion\plion.cpp(85) : warning C4700: Lokale Variable 'antworrt' wurde ohne Initialisierung verwendet
    Linker-Vorgang läuft...
    LINK : fatal error LNK1168: "Debug/plion.exe" kann nicht zum Schreiben geoeffnet werden
    Fehler beim Ausführen von link.exe.
    
    plion.exe - 1 Fehler, 3 Warnung(en)
    

    Mein txt :

    Sam ist cool?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    Sam ist king?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    Sam ist der mit dem?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    Sam ist sam?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    Sam ist gott?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    


  • Plion schrieb:

    Mein txt :

    Sam ist cool?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    Sam ist king?
    Ja
    Nein
    Vieleicht
    1.30
    1.20
    4
    ...
    

    Liest du CStolls Posts überhaupt?

    CStoll schrieb:

    Frage 1?
    3 2
    erste Antwort
    zweite Antwort
    dritte Antwort
    Frage 2?
    4 1
    erste Antwort
    zweite Antwort
    dritte Antwort
    vierte Antwort
    ...
    


  • anyway danke Cstoll für deine hilfe ich habs jetzt geschafft... allhamdollelah


Anmelden zum Antworten