RECHTSCHREIBPROGRAMM.c

konfus123

Mitglied
Hallo,
ich möchte ein C Programm schreiben wo ein Zufallsgenerator Wörter aussucht.

Als Beispiel:

Schreibe das Wort nach : Ente

Ich komme einfach nicht weiter.:confused:

Er sollte 30 - 40 Wörter die ich ihm programmiert habe anzeigen können.

Kann mir bitte jemand helfen mit einem Quelltext oder sowas in der Richtung!

konfus123
 
Hallo,

vielleicht hilft dir das ja weiter:
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char *woerter[] = {
    "Apfel",
    "Birne",
     /* usw. */
};

char *zufallswort() {
    return woerter[rand() % (sizeof(woerter)/sizeof(char *))];
}

int main() {
    srand(time(0)); /* Zufallsgenerator initialisieren */
    printf("%s", zufallswort());

    return 0;
}

Grüße,
Matthias
 
Vielen Dank jetzt klappt es schon fast!!
Kann jemand das Programm durschauen!!
Der Compiler zeigt keine Fehler an aber wenn ich es öffne funktioniert das Programm nicht> es macht nicht das was es soll.
Kann mir hier jemand noch einmal helfen?

konfus 123

Hier der Quelltext:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>




char *woerter[] = {

"Apfel",

"Birne",




};



char *zufallswort() {

return woerter[rand() % (sizeof(woerter)/sizeof(char *))];

}



int main() {
int i;
int anz;
int punkte;
int zufallswort;
int Birne;
int Apfel;


srand(time(NULL));

punkte = 0;

printf("Wie viele Wörter sollen abgefragt werden?");
scanf("%i",anz);





for(i=1;i<=anz;i++) {





printf("%s",zufallswort);
scanf("%s",&zufallswort);

}

if(Apfel==Apfel)
punkte=punkte+1;


if(Birne==Birne)
punkte=punkte+1;


printf("Du hast von %i möglichen Punkten %i Punkte erreicht!\n",anz,punkte);


return 0;

}
 
Kann nicht irgendjemand den Quelltext einaml nach Fehlern durchgucken oder mir sagen was ich falsch gemacht habe

>>vielleicht muss ich noch eine include anweisung eingeben

mfg
 
Hi.
Kann nicht irgendjemand den Quelltext einaml nach Fehlern durchgucken oder mir sagen was ich falsch gemacht habe

>>vielleicht muss ich noch eine include anweisung eingeben
Wenn das der Fall wäre, würde sich der Compiler wegen irgendwas beschweren. Da es kompiliert wird, kann keine Headerdatei fehlen.

Aber schauen wir uns einfach nochmal an was Matthias geschrieben hat und was du dann daraus gemacht hast:
C:
printf("%s", zufallswort()); /* Matthias */
printf("%s", zufallswort);   /* konfus123 */
Fällt dir was auf? Evtl. ist es keine gute Idee, einer Variable und einer Funktion den gleichen Namen zu geben?!

Und bitte schliesse deinen Quelltext in Zukunft in Code-Tags ein ([c]...[/c] für C Code; [code=cpp]...[/code] für C++ Code etc.), so macht es wirklich keinen Spass deinen Code anzuschauen.

Gruß
 
Dann wäre noch zu sagen, dass dein Vergleich kein Sinn macht.
C++:
if(Apfel==Apfel)
punkte=punkte+1;


if(Birne==Birne)
punkte=punkte+1;

Tipp: Du musst die Eingabe mit dem Wort aus dem Array vergleichen.
 
Hi,
ich habe eure antworten die ihr mir gegeben habt im Quelltext geändert!!
Er funktioniert aber immer noch nicht er zeigt zwar die Wörter an aber er:

Gibt immer wieder neue Wörter an ob wohl man der Schleife den Befehle gegeben hat das er nur 2 Wörter abrufen soll!

und die Punkteanzeige stimmt nicht wenn man statt anz in der Schleife bsp. 2 eingegebn hat.

Hier ein weiteres mal der Quelltext!

Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

   

   
char *woerter[] = {
   
"Apfel",
"Birne",
"Fabian",
"lesen",
"USA",
        
};
      
char *zufallswort() {
  
return woerter[rand() % (sizeof(woerter)/sizeof(char *))];
  
}
  
       
  
int main(void) {

int i;
int anz;
int punkte;
int zufall_wort;
int Birne;
int Apfel;
  
 
srand(time(NULL)); 
       

        
printf("\nRECHTSCHREIBPROGRAMM\n\n");
          
printf("\n-----------------------------------------------\n");
printf("Wie viele Wörter sollen abgefragt werden?");
scanf("%i",anz);
printf("-----------------------------------------------\n");


punkte = 0;
for(i=1;i<=anz;i++) {

printf("-----------------------------------------------\n");
printf("Schreibe das Wort einmal nach: %s",zufallswort());
scanf("%s",&zufall_wort);
printf("-----------------------------------------------\n");


  
if(zufall_wort==Apfel) {
printf("Richtig einen Punkt für Fabian!");

punkte=punkte+1;
}



if(zufall_wort==Birne) {
printf("Richtig einen Punkt für Fabian!");
punkte=punkte+1;     }    

}
printf("Du hast von %i möglichen Punkten %i Punkte erreicht!\n",anz,punkte);


return 0;
 

}
 
Hi.
Code:
scanf("%i",anz);
Das muß heißen:
C:
scanf("%i", &anz);
Code:
scanf("%s",&zufall_wort);
Hier gibst du an, das ein String eingelesen werden soll. Übergibst allerdings einen Zeiger auf int. Das passt nicht zusammen.

Dann möchtest du offenbar überprüfen ob der Benutzer das Zufallswort richtig geschrieben hat. Dazu müßtest du dir erstmal das Zufallswort speichern - sonst kannst du ja schlecht kontrollieren ob es richtig war.

Strings kann man in C nicht einfach mit dem == Operator vergleichen (da werden nur Zeiger verglichen), sondern mit den strcmp Funktionen.
C:
char * z = zufallswort();
char x[100];

printf("-----------------------------------------------\n");
printf("Schreibe das Wort einmal nach: %s\n", z);
scanf("%s", x);

if (strcmp(z, x) == 0) {
  puts("Richtig!");
  punkte++;
} else {
  puts("Leider falsch.");
}

Gruß

PS: Schreibst du den Code wirklich so unübersichtlich ohne Einrückungen und alles direkt hintereinadergeklatscht (keine Leerzeichen) in deine Datei?! Gewöhne dir mal einen besseren Stil an, dann fällt es nicht nur dir leichter den Code zu lesen und zu verstehen.
 
Zurück