Co zamiast scanf do wczytania int'a

0

Witam. Mam za zadanie napisać projekt na zaliczenie przedmiotu, jednak są pewne wymagania co do niego... Ma być w C, oraz nie można używać w nim funkcji scanf(), gdyż jest ona 'niebezpieczna', i za jej użycie wyrzuca z sali...
Więc moje pytanie: co można użyć zamiast niej, do wczytania jednej liczby typu int ?
Czy użyć funkcji getchar(), potem konwertować to na int, czy utworzyć tablicę specjalnie do tego celu i wczytywać tam jeden znak funkcją sscanf, gets, czy fgets?
Albo czy np. tak użyta funkcja scanf

 scanf("%1d", &N);

będzie bezpieczna? Nie dojdzie do przepełnienia bufora, choć pewnie i tak Pan prof. nie pozwoli tego użyć.
Proszę o podpowiedź, co byłoby najbardziej optymalne.

1

Jeżeli profesor uważa, że scanf jest niebezpieczny, to używając gets masz gwarantowaną powtórkę przedmiotu. O ile dobrze pamiętam, to scanf ma dwa problemy z bezpieczeństwem. Po pierwsze, parametr odpowiadający za formatowanie nie powinien być (bez specjalnego powodu) zwykłą zmienną char*, tylko najlepiej literałem. Po drugie używając "%s" należy zawsze sprecyzować wielkość buforu, np przez "%50s", gdy bufor jest zadeklarowany jako char buf[50+1].

1

gets jest jeszcze niebezpieczniejszy. Lepiej użyć fgets lub read i następnie parsować przy pomocy sscanf.

1

A ja nie rozumiem niby czemu dla wczytywania int scanf jest niebezpieczny (zakładając poprawność ciągu formatującego i dodatkowych parametrów)?
Może "profesor" nie wie jak jest wartość zwracana przez scanf?
fgets i ssanf nie daje dodatkowego bezpieczeństwa, jedynie jest bardziej kłopotliwy.
No chyba, że sam masz napisać parser, ale wtedy lepiej by zrobił jakby powiedział to wprost.

0

Sam nie wiem czego On chce.. Nie pozwolił używać scanf() i fscanf(), ma do tego 'uraz' ;) Dziwne, na laboratoriach z tego przedmiotu uczyli nas używać scanf, na wykładach nie pozwala. Co dziwne, mówił że lepiej użyć tego getsa. Wspominał też, że jak kiedyś będziemy pisać programy, to warto napisać swojego "scanf'a", więc ten własny parser nie jest wykluczony... Tylko jak się do tego zabrać... Taka funkcję napisać, jak mówi winerfresh?

//Edit
W sumie może o tego scanf'a to faktycznie do stringów nie pozwala, tylko dokładnie nie sprecyzował... Postaram się z nim skontaktować w tej sprawie.
Póki co dzięki za informacje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1