odczytywanie tylko liczb z klawiatury.

0

Jestem dość początkującym w języku C i potrzebuję pomocy. Mianowicie chcę wprowadzić w programie taki kod, dzięki któremu będzie można wprowadzać z klawiatury tylko liczby. najpierw program prosi o wprowadzenie danych, i mają to być tylko liczby, a po wprowadzeniu czegos innego, wyswietli mi się komunikat, który sobie wymyślę. tylko nie potrafię tego zrobić.

np.
printf("Wprowadz liczbe: \n");
fgets(line, sizeof(line), stdin);
sscanf(line, "%d", &zmienna);

i dalej może coś z
if(isalpha(zmienna))
printf("Nie wprowadziłes cyfry ani liczby. \n);

?

Proszę o pomoc.

0

Wypróbuj: Zabezpieczenie przed wpisywaniem liter

Edit: btw, tam jest błąd a nawet dwa. Poprawione.

0

Napisałem coś takiego:

	int punkt;		
	while(scanf("%d", &punkt) != 1) {
	printf("Wprowadz cyfry lub liczby!.\n");
	while(char c=getchar() != '\n' && c!=EOF); 
	}

i pojawia mi się komunikat c:18:9: error: expected expression before ‘char’

0
int zmienna;
while(scanf("%d", &zmienna) != 1) //dopóki nie uda się wczytać
{
  //ew. komunikat błędu
  int c;
  while((c = getchar()) != '\n' && c != EOF); //pętla wyciągająca znaki z bufora
}
 

To rozwiązanie przy kompilowaniu zawsze reaguje dopiero za drugim razem. Jak np trzeba coś wprowadzić z klawiatury. Załóżmy printf("wprowadź wiek\n") pojawia się ten komunikat i jeśli się wpisze jakąkolwiek cyfrę czy liczbę, to za pierwszym razem nic to nie daje, dopiero za drugim odbiera wprowadzone dane. Natomiast jeśli się wpisuje co innego niż cyfry, to działa natychmiast. To tak musi być?

0
#include <stdio.h>
#include <math.h>

float f; 		/* stopnie fahrenheita */
float c;		/* stopnie celsjusza */
int wybor;

int main()
{

	printf("\n\nWybierz rodzaj konwersji: \n\n");
	printf("1. Stopnie Celsjusza na Fahrenheita. \n\n");
	printf("2. Stopnie Fahrenheita na Celsjusza. \n\n");
	scanf("%d", &wybor);


	switch (wybor) {
		case 1: printf("Podaj temperature w stopniach Celsjusza: \n\n");
			scanf("%f", &c);

			while(scanf("%f", &c) != 1) {
			printf("Nie wprowadziles cyfr ani liczb! \n");
  			while
			((c = getchar()) != '\n' && c != EOF); 	
			}			

			printf("Podana temperatura to %f stopni Fahrenheita. \n", (((9.0/5.0) * c) + 32.0));
		break;
		case 2: printf("Podaj temperature w stopniach Fahrenheita: \n\n");
			scanf("%f", &f);

			while(scanf("%f", &c) != 1) {
			printf("Nie wprowadziles cyfr ani liczb! \n");
  			while
			((c = getchar()) != '\n' && c != EOF); 
			}

			printf("\n\nPodana temperatura to %f stopni Celsjusza. \n\n", ((5.0 / 9.0) * (f - 32)));
		break;
	}
		
	return(0);
} 

Mam taki program, zastosowałem w nim to zabezpieczenie przed wpisywaniem liter

			while(scanf("%f", &c) != 1) {
			printf("Nie wprowadziles cyfr ani liczb! \n");
  			while
			((c = getchar()) != '\n' && c != EOF); 
			}

i jest coś takiego, że odczyt wpisanej temperatury dopiero reaguje za drugim razem. Jest komunikat podaj temperaturę i za pierwszym razem po wpisaniu np 100 nic się nie dzieje, dopiero za drugim razem program to liczy. Co jest źle?

EDIT:
Przed tym kodem zabezpieczającym przed wpisaniem liter zastosowałem zamiast zwykłego scanfa:

fgets(line, sizeof(line), stdin);
sscanf(line, "%...", &zmienna);

i już jest tak jak ma być.

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.