]Hallo zusammen,
ich habe vor ein paar Tagen angefangen C zu lernen (Programmierkenntnisse vorhanden: C++ basics, C# schon ein bisschen mehr) und muss ganz ehrlich gestehen, dass ich C super finde. Obwohl alle tutorials scanf() als Standart für die Eingabe durch die Konsole wählen, was ja alles andere als sicher ist. Hab mich hier und hier versucht darüber zu informieren, aber die 'sichere' Eingabe mit sscanf() hat auch seine Macken.
Deshalb wollte ich ein für alle Male klären, wie denn eine sichere Eingabe aussieht.
Die Methode aus dem ersten link lässt sich nähmlich genauso mit der Eingabe eines char veräppeln:
eigentlich hatte ich gehofft, dass die Typ Konvertierung in unsigned int, das ausschließt.
ich habe vor ein paar Tagen angefangen C zu lernen (Programmierkenntnisse vorhanden: C++ basics, C# schon ein bisschen mehr) und muss ganz ehrlich gestehen, dass ich C super finde. Obwohl alle tutorials scanf() als Standart für die Eingabe durch die Konsole wählen, was ja alles andere als sicher ist. Hab mich hier und hier versucht darüber zu informieren, aber die 'sichere' Eingabe mit sscanf() hat auch seine Macken.
Deshalb wollte ich ein für alle Male klären, wie denn eine sichere Eingabe aussieht.
Die Methode aus dem ersten link lässt sich nähmlich genauso mit der Eingabe eines char veräppeln:
Code:
#include <stdio.h>
#include "functions.h"
int main()
{
//
int a, b;
char buf[256];
unsigned int frame, field, tmp;
printf("Seitenlänge des Rahmens(wird quadriert): \n");
fgets(buf, 255, stdin);
sscanf(buf, "%d", &a);
printf("Feldgrößse (wird quadriert): \n");
fgets(buf, 255, stdin);
sscanf(buf, "%d", &b);
tmp = a;
field = b;
if (tmp > field)
{
frame = tmp;
}
else if (field > tmp)
{
frame = field;
field = tmp;
}
else
{
field = 0;
}
printf("Rahmen: %d\nFeld: %d\n", frame, field);
if (frame % 2 == 0 && field % 2 == 0)
{
// both even
printf("Beide Zahlen gerade!\n");
printFrameAndField(frame, field);
}
else if (frame % 2 != 0 && field % 2 != 0)
{
// both odd
printf("Beide Zahlen ungerade!\n");
printFrameAndField(frame, field);
}
else
{
printf("Beide Zahlen muessen entweder gerade oder ungerade sein!\n");
}
return 0;
}
eigentlich hatte ich gehofft, dass die Typ Konvertierung in unsigned int, das ausschließt.
Zuletzt bearbeitet: