diff --git a/src/Input.c b/src/Input.c index c22c436..b576a46 100644 --- a/src/Input.c +++ b/src/Input.c @@ -3,16 +3,30 @@ #include char* getUserInput() { - //Beim benutzen von dieser Funktion sollte man danach free(userinput) benutzen, damit der speicherplatz wieder freigegeben wird - char *input = NULL; - size_t size = 0; - //getline weißt speicher zu deshalb größe 0 - printf("Ihre Eingabe: "); - getline(&input, &size, stdin); + + const int BUFFER_SIZE = 64; + char *input = (char*)malloc(BUFFER_SIZE * sizeof(char)); + if (input == NULL) { + // Fehler bei speicherzuweisung + return NULL; + } + + printf("Enter your input: "); + if (fgets(input, BUFFER_SIZE, stdin) == NULL) { + // Fehler bei fgets + free(input); + return NULL; + } - size_t len = strlen(input); //ignorieren von neuer Zeile + size_t len = strlen(input); if (len > 0 && input[len - 1] == '\n') { input[len - 1] = '\0'; } + + // Länge an den eigentlichen input anpassen um speicher zu sparen + char *resizedInput = realloc(input, strlen(input) + 1); + if (resizedInput != NULL) { + input = resizedInput; + } return input; } diff --git a/test/test_Input.c b/test/test_Input.c new file mode 100644 index 0000000..de3c4b9 --- /dev/null +++ b/test/test_Input.c @@ -0,0 +1,34 @@ +#ifdef TEST +#include +#include "unity.h" +#include "Input.h" + + +void setUp(void) { +} + +void tearDown(void) { +} + +void test_getUserInput(void) { + + const char *test_input = "a1"; + FILE *tempInputFile; + // Datei erstellen + tempInputFile = fopen("temp_input.txt", "w"); + fprintf(tempInputFile, "%s\n", test_input); + fclose(tempInputFile); + + // aus der Datei lesen um User input zu simulieren + tempInputFile = freopen("temp_input.txt", "r", stdin); + + + char *actual_input = getUserInput(); + TEST_ASSERT_EQUAL_STRING(test_input, actual_input); + + //Clean-up + free(actual_input); // siehe kommentar in input.c + fclose(tempInputFile); + remove("temp_input.txt"); // Datei automatisch löschen +} +#endif // TEST