From 3139f60c53cbc8ddfd8d731a67d74c71a38a7c98 Mon Sep 17 00:00:00 2001
From: Manuel Bucher <manuel.bucher@hu-berlin.de>
Date: Mon, 4 Jun 2018 13:50:47 +0200
Subject: [PATCH] finilized read_line

---
 Makefile  |  4 ++--
 loesung.c | 38 +++++++++++++++++---------------------
 2 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/Makefile b/Makefile
index ba416a1..5df0e88 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 all: loesung
 
 WARNINGS = -Wall -Werror
-OPTIONAL = #-Werror -Wpedantic
+OPTIONAL = -Werror -Wpedantic
 DEBUG = -ggdb -fno-omit-frame-pointer
 OPTIMIZE = -O3 -std=c11
 
@@ -12,7 +12,7 @@ clean:
 
 # Builder will call this to install the application before running.
 install:
-	#nothing
+	echo install
 
 # Builder uses this target to run your application.
 run:
diff --git a/loesung.c b/loesung.c
index 0d17f7f..917ffba 100644
--- a/loesung.c
+++ b/loesung.c
@@ -34,25 +34,19 @@ ReadResult read_line(Tile* p_tile){
     if (c == EOF) {
         return RdEof;
     }
-    int num_numbers = 0;
+    int cur_number = 0;
     bool cur_whitespace = true;
+    uint32_t *p_cur; // aktuell zu parsende Zahl
     while(1) {
-        c = getchar();
         if ('0' <= c && c <= '9') {
             if (cur_whitespace) {
-                num_numbers++;
+                if(cur_number == 2) {
+                    return RdErrTooManyNumbers;
+                }
+                p_cur = (&p_tile->x)+cur_number;
+                *p_cur = 0;
                 cur_whitespace = false;
-            }
-            uint32_t *p_cur;
-            switch(num_numbers) {
-            case 1:
-                p_cur = &p_tile->x;
-                break;
-            case 2:
-                p_cur = &p_tile->y;
-                break;
-            default:
-                return RdErrTooManyNumbers;
+                cur_number++;
             }
             // 429496730 = 2^32 / 10, daher wenn `p_cur` groesser ist, wird ein
             // overflow erzeugt
@@ -68,11 +62,11 @@ ReadResult read_line(Tile* p_tile){
             }
             (*p_cur) += digit;
         } else if (c == ' ') {
-            if (cur_whitespace == true) {
-                cur_whitespace = false;
+            if (cur_whitespace == false) {
+                cur_whitespace = true;
             }
         } else if (c == '\n') {
-            if (num_numbers == 2) {
+            if (cur_number == 2) {
                 return RdOk;
             } else {
                 return RdErrTooFewNumbers;
@@ -80,6 +74,8 @@ ReadResult read_line(Tile* p_tile){
         } else {
             return RdErrNonDigitCharacter;
         }
+        c = getchar(); // get next character
+
     }
     return RdOk;
 }
@@ -146,12 +142,12 @@ int main (int argc,
     ReadResult result = parse_input(&f);
     switch (result) {
     case RdOk:
-        printf("Valider Input");
-        printf("Anzahl: %d", f.num_tiles);
-        printf("Range(%d, %d), (%d, %d)",
+        printf("Valider Input\n");
+        printf("Anzahl: %d\n", f.num_tiles);
+        printf("Range(%d, %d), (%d, %d)\n",
                f.t_min.x, f.t_min.y,
                f.t_max.x, f.t_max.y);
-        printf("Range x: %d, %d",
+        printf("Range x: %d, %d\n",
                f.t_max.x - f.t_min.x,
                f.t_max.y - f.t_min.y);
         break;
-- 
GitLab