Skip to content
Snippets Groups Projects
Commit 3139f60c authored by Manuel Bucher's avatar Manuel Bucher
Browse files

finilized read_line

parent aff0e3f9
Branches
No related merge requests found
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:
......
......@@ -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;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment