Spoiler: show
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAXINBUF (255+1)
#define MAX_MESSAGES 8
typedef enum {
MSG_OUTOFBOUNDS = 0,
MSG_HIGHER,
MSG_LOWER,
MSG_CONGRATS,
MSG_FMT_TRIES,
MSG_UPPERLIMIT,
MSG_FMT_SETHIDDEN,
MSG_FMT_PROMPT
} MsgPos;
// ----------------------------------------------------------------------------
MsgPos hint_position(int guess, int hidden, int lim)
{
if (guess > lim || guess < 1)
return MSG_OUTOFBOUNDS;
if (guess < hidden)
return MSG_HIGHER;
if (guess > hidden)
return MSG_LOWER;
return MSG_CONGRATS;
}
// ----------------------------------------------------------------------------
char **set_language( char **msg_en, char **msg_gr )
{
char inbuf[ MAXINBUF ];
puts("Choose language / Επιλέξτε γλώσσα:");
puts("\n\t1: English (default)\n\t2: Ελληνικά");
printf("> ");
fgets(inbuf, MAXINBUF, stdin);
if ( atoi( inbuf ) == 2 )
return msg_gr;
return msg_en;
}
// ----------------------------------------------------------------------------
int main()
{
char inbuf[ MAXINBUF ] = "";
int limit, guess = -1, hidden, count = 0;
MsgPos pos;
char *msg_gr[MAX_MESSAGES] = {
"\tεκτός ορίων, ξαναπροσπαθήστε\n", // MSG_OUTOFBOUNDS
"\tπιο ψηλά\n", // MSG_HIGHER
"\tπιο χαμηλά\n", // MSG_LOWER
"\nΣυγχαρητήρια, το βρήκατε!", // MSG_CONGRATS
"\tχρειαστήκατε %d προσπάθειες\n\n", // MSG_FMT_TRIES
"Ανώτατο όριο ( μεγαλύτερο του 1 ): ", // MSG_UPPERLIMIT
"\tέβαλα έναν αριθμό από το 1 έως το %d\n\n", // MSG_FMT_SETHIDDEN
"Μαντεψιά #%d: " // MSG_FMT_PROMPT
};
char *msg_en[MAX_MESSAGES] = {
"\tout of bounds, try again\n", // MSG_OUTOFBOUNDS
"\thigher\n", // MSG_HIGHER
"\tlower\n", // MSG_LOWER
"\nCongratulations, you found it!", // MSG_CONGRATS
"\tit took you %d tries\n\n", // MSG_FMT_TRIES
"Give upper limit ( greater than 1 ): ", // MSG_UPPERLIMIT
"\tI set a number from 1 to %d\n\n", // MSG_FMT_SETHIDDEN
"Guess #%d: " // MSG_FMT_PROMPT
};
char **messages = NULL; // δεικτης σε πίνακα από strings
srand( time(NULL) ); // γεννήτρια ψευδοτυχαίων
messages = set_language( msg_en, msg_gr ); // επιλογή γλώσσας
putchar('\n');
do { // διάβασμα ανώτατου ορίου
printf( messages[ MSG_UPPERLIMIT ] );
fgets(inbuf, MAXINBUF, stdin);
limit = atoi( inbuf );
} while ( limit < 1 );
hidden = rand() % limit + 1; // επιλογή τυχαίου αριθμού
printf( messages[ MSG_FMT_SETHIDDEN ], limit);
// το κεντρικό μας loop
do {
printf( messages[ MSG_FMT_PROMPT ], count+1);
fgets(inbuf, MAXINBUF, stdin); // διάβασμα μαντεψιάς
guess = atoi( inbuf ); // μετατροπή της σε int
pos = hint_position(guess,hidden,limit);// επιλογή απάντησης
if ( pos != MSG_OUTOFBOUNDS ) // έγκυρη μαντεψιά
count++; // μετρητής προσπαθειών
puts( messages[ pos ] ); // τύπωμα απάντησης
} while (guess != hidden);
printf( messages[ MSG_FMT_TRIES ], count); // τύπωμα προσπαθειών
return 0;
}
Βασικά, μισό να το ανεβάσω στο codepad.



