Buchstaben-Raten ok so, oder verbesserungswürdig?
-
Hi Leute,
ich habe mal ein kleines Buchstaben-Raten programmiert und wollte mal
wissen was man noch so verbessern könnte bzw. was schlecht programmiert ist?#include <stdio.h> #include <stdlib.h> /* Mein kleines Buchstaben-Raten! */ char new_char(void){ int x = getchar(); fflush(stdin); return x; } int gen_number(int max){ return 1+rand()%max; } int main(void){ srand(time(NULL)); char alphabet[26] = "abcdefghijklmnopqrstuvwxyz"; char randomChar, userChar; int totalTrials, remainingTrials; totalTrials = 5; remainingTrials = totalTrials; randomChar = alphabet[gen_number(26)]; printf("********************************\n"); printf("Willkommen zum Buchstaben-Raten!\n"); printf("********************************\n\n"); while (remainingTrials > 0){ printf("Bitte Buchstaben eingeben:"); userChar = new_char(); if (userChar == randomChar){ remainingTrials--; break; } else{ remainingTrials--; } } if (remainingTrials > 0){ printf("Der Buchstabe war %c. Sie haben %i Versuche gebraucht.", randomChar,totalTrials-remainingTrials); getchar(); } else { printf("Sie haben verloren. Sie konnten trotz %i Versuchen den Buchstaben %c nicht raten.", totalTrials,randomChar); getchar(); } return 0; }
MfG ::john::
-
Zeile 8: new_char sollte get_char heißen, da es einen char holt und nicht neu kreiert.
Außerdem ist das eine char-Funktion die ein int zurückgibt, da sollte schon der Compiler eine Warnung ausgeben.Zeile 22: "abcdefghijklmnopqrstuvwxyz" hat 27 Zeichen und nicht 26, du hast das '\0'-Zeichen vergessen. Benutze einfach
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";, dann kann sowas nicht passieren.
Meiner Meinung nach darf in Arrayklammern niemals eine Zahl stehen, aber da steh ich wohl alleine mit.Zeile 24-26 lassen sich zu
int totalTrials = 5, remainingTrials = totalTrials;
zusammenfassen.
totalTrials sollte const sein, dann lässt es sich aber nicht mehr so schön zusammenfassen.Zeile 38-44 lassen sich zu
if (userChar==randomChar) break;
remainingTrials--;
zusammenfassen.Zeile 47-57: Es steht in beiden Zweigen getchar();, daher kann man es auch rausnehmen und vor das return 0 schreiben.
Ich hab keine Ahnung was das getchar() eigentlich tut.Den Zufallsbuchstaben kannst du auch direkt mit
char randomChar = rand()%26+'\a';
generieren und dir gen_number und alphabet komplett sparen.Zeile 49 und 54 sollten hinten ein '\n' printen.
Mehr finde ich gerade nicht.
Wie wunderbar kritisch man doch mit fremden Code ist
Musste mich davon ablenken dass mein eigener Code gerade nicht funzt -.-