[C] Sprawdzenie czy zmienna jest liczbą

0

Witam wszystkich. Niedawno rozpocząłem przygodę z programowaniem. Napisałem (w języku C) prosty program operujący na liczbach typu double. Chciałbym do niego dodać mechanizm weryfikujący poprawność wprowadzonych danych, niestety nie wiem jak się za to zabrać. Chciałbym, aby możliwe było także podawanie programowi zmiennych zapisanych w notacji wykładniczej, np. 1e-6, 1e+8, itp. Czy istnieje jakiś w miarę prosty sposób realizacji powyższego mechanizmu?

0
#include <stdio.h>

int main () {
  double normalValue = 15.32;
  double largeValue = 1.254e25;

  // %e always shows scientific notation
  printf("normalValue: %e \n", normalValue);
  printf("largeValue: %e \n", largeValue);

  // %g shows scientific notation when a value is large
  printf("normalValue: %g \n", normalValue);
  printf("largeValue: %g \n", largeValue);
}

https://stackoverflow.com/questions/24342982/reading-scientific-notation-in-c

3

Pewnie, użyj funkcji z rodziny scanf. Zwracają one liczbę poprawnie wczytanych danych, co pozwala na weryfikację, czy podana wartość była poprawna.

0

Bardzo Wam dziękuję za pomoc. Poszedłem tym tropem i uzyskałem działający program :)
Postanowiłem napisać ten sam program, ale z liczbami podawanymi jako argumenty wywołania. Niestety, po podaniu zera program kończy działanie. Prosiłbym o pomoc w poprawie tego błędu. Poniżej wstawiam kod :)

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

int main(int argc, char **argv)
{
double a,b,c,delta;

if (argc<4)
	{
		printf("Za malo argumentow!");
		return(2);
	}

	while(!strtod(argv[1], NULL))
		{
			fflush(stdin);
			return(1);
		}
a=atof(argv[1]);

	while(!strtod(argv[2], NULL))
		{
			fflush(stdin);
			return(1);
		}
b=atof(argv[2]);

	while(!strtod(argv[3], NULL))
		{
			fflush(stdin);
			return (1);
		}
c=atof(argv[3]);

delta=b*b-4*a*c;

	if(delta>0)
	{
		delta=sqrt(delta)/(2*a);
		printf("Dwa pierwiastki rzeczywiste: %f i %f\n", -b/(2*a)-delta, -b/(2*a)+delta);
	}
	else if (delta==0)
		{
			printf("Pierwiastek podwojny: %f\n", -b/(2*a));
		}
	else
		{
			delta=sqrt(-delta)/(2*a);
			printf("Dwa pierwiastki zespolone postaci: (%f+/-%fi)/%f", -b, delta, 2*a);
		}
return 0;
}
0

Problem już rozwiązany. Dla argv[2] oraz argv[3] dodałem warunek, że pętla while ma być wykonywana, gdy ich wartości różnią się od '0'.
Temat można już zamknąć. Dziękuję wszystkim za pomoc :)

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