If deyiminde küçük bir sorun

NoWeDoR
Cool Çırak
Kod:
#include <stdio.h>

int main()
{
	int deger;
	printf("Bir sayi degeri giriniz: ");
	scanf("%d", &deger);

	if (deger)
	{
		do
		{
			printf("Lutfen bir sayi degeri giriniz: ");
			scanf("%d", &deger);
		} while (deger);
		printf("Bir sayi degeri girdiniz.\n");
		return 0;
	}

	else
	{
		printf("Bir sayi degeri girdiniz.\n");
	}
	return 0;
}
Arkadaşlar gördüğünüz gibi kullanıcıdan bir sayı değeri istiyorum ama varsayalım o ısrarla bir karakter değeri giriyor. (k q s * - , ; gibi)
Bunu tam olarak kullanıcının düzeltmesini istiyorum ve her seferinde kullanıcı sayı değeri dışında bir değer girince uyararak yeni bir değer girmesini istiyorum.
Ancak bunu yine gördüğünüz gibi if(deger) ve while(deger) içinde tam olarak programa anlatamıyorum. Ascii table'ı kullanarak biraz uğraştım ancak tam olarak programa derdimi anlatamadım.

Acaba bunu nasıl programa aktarabilriz?
 
mbk.
Forum Kalfası
Scanf ile veri aldıktan sonra ASCII değerine gore If koşulu yazman lazım. Eğer girilen karakterin ASCII kodu 48 den büyük esit ve 57 den kucuk esit ise bu bir sayıdır. Arasında değilse sayı değildir.
 
NoWeDoR
Cool Çırak
Evet, ancak kullanıcı değer olarak 100 de girebilir. Ascii de 100 bir sayıya, bir ifadeye karşılık gelmiyor. O halde yine problemle karşılaşılacak.

Ve belirttiğim, aşağıdaki gibi de denemiştim bunu. Ancak sonuç alamadım.

Kod:
#include <stdio.h>

int main()
{
	int deger;
	printf("Bir sayi degeri giriniz: ");
	scanf("%d", &deger);

	if (deger<= '48' && deger >='57')
	{
		do
		{
			printf("Lutfen bir sayi degeri giriniz: ");
			scanf("%d", &deger);
		} while (deger<='48' && deger>='57');
		printf("Bir sayi degeri girdiniz.\n");
		return 0;
	}

	else
	{
		printf("Bir sayi degeri girdiniz.\n");
	}
	return 0;
}
ya da bu şekilde

Kod:
#include <stdio.h>

int main()
{
	int deger;
	printf("Bir sayi degeri giriniz: ");
	scanf("%d", &deger);

	if (deger<= 48 && deger >=57)
	{
		do
		{
			printf("Lutfen bir sayi degeri giriniz: ");
			scanf("%d", &deger);
		} while (deger<=48 && deger>=57);
		printf("Bir sayi degeri girdiniz.\n");
		return 0;
	}

	else
	{
		printf("Bir sayi degeri girdiniz.\n");
	}
	return 0;
}
 
mbk.
Forum Kalfası
siz int değişkene karakter girdiğiniz için program sapıtıyor. char olarak tanımlamanız gerekiyor
char olarak tanımladığınızda hem karakter hem sayı alabilirsiniz. değer isterken scanf yerine gets
kullanmanız gerekir get string.

do while dongusunu kullandığınızda ise siz değer girmeden bir kez çalışmasına neden olacaktır.
bu yüzden while döngüsünü kullandım

ascii karaktere cevirmek için (int)degisken olarak yazmanız gerekiyor.

Kod:
#include <stdio.h>

int main()
{
	char deger;
	printf("Bir sayi degeri giriniz: ");
	gets(&deger);
	if ((int)deger>=48 && (int)deger <=57)
	{
		printf("Bir sayi degeri girdiniz.\n");
	}

	else
	{
		while ((int)deger<48 || (int)deger >57)
		{
			printf("Lutfen bir sayi degeri giriniz: ");
			gets(&deger);
		} 
		printf("Bir sayi degeri girdiniz.\n");
	}
	return 0;
}
 
- Yönetici düzenlemesi: :
Üst