initial push
This commit is contained in:
parent
f9f5c4bcd1
commit
8cbf03e493
6
build.sh
Executable file
6
build.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -xe
|
||||
CFLAGS=""
|
||||
|
||||
gcc $CFLAGS -o plu main.c
|
133
main.c
Normal file
133
main.c
Normal file
@ -0,0 +1,133 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define MAX_KEYS 256
|
||||
#define MAX_MALLOC_VALUE 256
|
||||
|
||||
typedef struct key_value {
|
||||
int key;
|
||||
char* value;
|
||||
} key_value;
|
||||
|
||||
void print_key_values(key_value* kv, const int MAX);
|
||||
int find_key_index(key_value* kv, const char* STRING, const int MAX);
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
/* Seed time */
|
||||
srand(time(NULL));
|
||||
|
||||
/* create key - value structure */
|
||||
key_value* kv = malloc(sizeof(key_value) * MAX_KEYS); //returns void pointer.
|
||||
if (kv == NULL){
|
||||
perror("Malloc failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
//read from file
|
||||
FILE* file;
|
||||
char* buf = (char*)malloc(MAX_MALLOC_VALUE * sizeof(char));
|
||||
|
||||
char* tmp = (char*)malloc(MAX_MALLOC_VALUE * sizeof(char));
|
||||
char* tmp_value = (char*)malloc(MAX_MALLOC_VALUE * sizeof(char));
|
||||
|
||||
int number_of_items = 0;
|
||||
|
||||
file = fopen("plu.csv", "r");
|
||||
if(!file){
|
||||
printf("Cannot open file\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
while(fgets(buf, MAX_MALLOC_VALUE, file) != NULL){
|
||||
if ((strlen(buf)>0) && (buf[strlen (buf) - 1] == '\n'))
|
||||
buf[strlen (buf) - 1] = '\0';
|
||||
|
||||
tmp = strtok(buf, ",");
|
||||
tmp_value = strdup(tmp);
|
||||
|
||||
kv[number_of_items].value = tmp_value;
|
||||
strcpy(kv[number_of_items].value, tmp_value);
|
||||
|
||||
//printf("VAL-->\ttmp[%d]: %s\n", size, tmp_value); //debug
|
||||
|
||||
tmp = strtok(NULL, ",");
|
||||
kv[number_of_items].key = atoi(tmp);
|
||||
//printf("KEY-->\ttmp[%d]: %s\n", size, tmp); //debug
|
||||
|
||||
++number_of_items;
|
||||
|
||||
}
|
||||
fclose(file);
|
||||
free(buf);
|
||||
|
||||
/*
|
||||
* "Game" Logic
|
||||
* In this game, we need to print the fruit/veg name from the key/value's VALUE
|
||||
* and then we need to compare the INT value the user inputs
|
||||
* with the int value returned from the key/value's KEY
|
||||
*
|
||||
* random int ---> kv[r].key (int) and kv[r].value (char[])
|
||||
* user int --> compare(kr[r].key, user_int);
|
||||
* 0 if match, 1 if not
|
||||
*/
|
||||
//print_key_values(kv, size); //debug
|
||||
|
||||
// MAIN GAME LOOP
|
||||
char line[256];
|
||||
int input;
|
||||
|
||||
while(1){
|
||||
int random = rand() % number_of_items; //generate a random number with the number of items
|
||||
|
||||
char* item_to_guess = kv[random].value;
|
||||
int code_to_guess = kv[find_key_index(kv, item_to_guess, number_of_items)].key;
|
||||
|
||||
printf("--> %s: ", item_to_guess);
|
||||
|
||||
if (fgets(line, sizeof(line), stdin)) {
|
||||
if (sscanf(line, "%d", &input) == 1) {
|
||||
if(input == code_to_guess){
|
||||
printf("Correct!\n");
|
||||
} else {
|
||||
printf("Nope! It's: %d\n", code_to_guess);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("AWW WHAT DID YOU DOOOOO");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* free memory! */
|
||||
free(kv);
|
||||
free(tmp);
|
||||
free(tmp_value);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void print_key_values(key_value* kv, const int MAX){
|
||||
printf("| %20s | %4s |\n", "Value", "Key");
|
||||
printf("| -------------------- | ---- |\n");
|
||||
for(int i = 0; i < MAX; i++){
|
||||
printf("| %20s | %4d |\n", kv[i].value, kv[i].key);
|
||||
}
|
||||
}
|
||||
|
||||
int find_key_index(key_value* kv, const char* STRING, const int MAX){
|
||||
int i = 0; //index
|
||||
while(strcmp(STRING, kv[i].value)){
|
||||
++i;
|
||||
if(i > MAX){
|
||||
i = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user