Korekta pętli, w celu powrotu do początku

0

Witam!
Program ma za zadanie pytać użytkownika o liczbę kolumn i wierszy w macierzy po czym prosić o podanie wartoścido umieszczenia w każdym polu macierzy.
Zasadniczo program wykonałem i działa, jednakże mam problem z pętlami, które odrzucą błędnie wpisane dane rozmiaru/wartości, czyli np. wpisanie char/string zamiast int z zakresu 1-20 (dot. rozmiarów macierzy) oraz wszystkiego poza intem dla poszczególnych pól w macierzy. Aktualnie moje pętle w przypadku wpisanie złej danej nie wracają do swojego początku aby poprosić o poprawną daną.

#include<stdlib.h>
#include<stdio.h>
int main()
{
    int n,i,j,k;
    float S;

printf("How many rows?\n");
while (scanf("%d", &n) == 1)
{
	 if (n>=20||n<0)
	 {
		printf("You entered wrong number\n");
		continue;	
	 }
	 printf("You entered correct number\n");
}

printf("How many columns?\n");
while (scanf("%d", &k) == 1)
{
	if (k>=20||k<0)
	 {
		printf("You entered wrong number\n");
		continue;	
	 }
	 printf("You entered correct number\n");
}
printf("\n");

float tab[n][k];

for(j=0; j<n; j++)
{
for(i=0; i<k; i++)
{printf("Element [%d][%d]: ", j+1,i+1);
scanf("%f", &tab[j][i]);
}
}

printf("\n");

for(j=0; j<n; j++)
{
S=0;
for(i=0; i<k; i++)
{
S+=tab[j][i];
}
printf("The sum of the elements in row %d: %f\n", j+1, S);
}

printf("\n");

for(i=0; i<k; i++)
{
S=0;
for(j=0; j<n; j++)
{
S+=tab[j][i];
}
printf("The sum of the elements in column  %d: %f\n", i+1, S);
}

printf("\n");

system("PAUSE");
return 0;
} 
0

spróbuj tak:

 
printf("How many rows?\n");  
while(!(scanf("%d", &n) == 1 && n>0 && n<=20))
{
  fflush(stdin);	    
  printf("You entered wrong number\n");   
}
printf("You entered correct number\n");
0

Dziękuję bardzo za pomoc, działa bardzo dobrze.
Zauważyłem jednak, że wpisanie wartości typu 2e3 itp. powoduje zaakceptowanie tej wartości zawieszając program...
Czy jest jakiś sposób rozszerzenia tej pętli tak by odrzucało również te wartości?

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