I've not time for a more full answer now (I'll try later), but please, for the love of God, don't use scanf! As a general hint, use std.stdio.readln to get input as a string, then use the `to` function found in std.conv to convert it into what you want:
auto input = readln(); auto asInteger = to!int(input); To handle errors, you'll probably want to catch whatever it is that to throws on failure: int i; auto input = readln(); try { i = to!int(input); } catch (TheThingThatToThrows) { i = 0; } I don't know how to!int handles entry of floating point numbers, if it doesn't, what you may want to do: int i; auto input = readln(); try { i = cast(int) to!double(input); } catch (TheThingThatToThrows) { i = 0; } --- Sorry I couldn't be more thorough. I hope that helps!