Kontrola danych w C

drazy
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
0

Prosze o pomoc. Jestem początkująca.
Mam napisac program ktory prosi uzytkownika o podanie liczby naturalnej a potem entera. No i zrobilam sobie tak, ale jezeli np wpisze 0.9 to koncowka ta jest w buforze i petla zle działa...co tu zrobic? :)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int a;
printf("Podaj liczbe natu\n");

while(!(scanf("%d",&a)==1&&getchar()=='\n'))
{
printf("Popraw sie\n");

                                         }

printf("ok\n");

system("pause");
return 0;
}

Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

"(...) otherwise, the behavior is undefined".
drazy
No własnie nie rozumiem przypisania getchara do zmiennej c... Piersza petle rozumiem,potem wchodzimy do bloku. alokujemy zm c ktorej przypisujemy to co wczyta getchar. Czyli jesli powiedzmy podam 0.9 to: sprawdzi '.' jeden,potem 9 - tez jeden i za trzecim razem dojdzie do tego entera?
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 dni
0

0.9 to liczba typu double (nie int) w scanf'ie odpowiedni format %lf lub %f w zależności od kompilatora.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
drazy
Tak tak,wiem ale wlasnie o to chodzi zeby kontolowac ZLE wpisane dane ;)
_13th_Dragon
Jeżeli chodzi ci o to aby nie przyjmowało 0.9 zamiast int'a to wystarczy wewnątrz pętli dodać: while(getchar()!='\n') {}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.