Hogy lehet a bekérendő adatokat csak számra korlátozni?
A másodfokú egyenlet megoldására kellett programot írni úgy hogy még a leghülyébb felhasználó is tudja használni hiba nélkül. A tanár csak egy példát mondott rá pl ne lehessen betűket megadni értékeknek. Más kikötésre ötlet?
ilyen a programom:
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, D, x1, x2, x, D1;
printf("Kerem e szerint adja meg az adatokat!\n");
printf("ax^2 + bx + c = 0\n");
printf("Kerem az egyenlet egyutthatoit! (csak szam)\n");
printf("\n");
do
{
printf("a: ");
scanf("%f", &a);
if (a == 0.0)
{
printf("Az egyenlet igy nem masodfoku. \n");
printf("\n");
}
}
while (a == 0.0);
printf("b: " );
scanf("%f",&b);
printf("c: " );
scanf("%f",&c);
D = b*b-(4*a*c);
printf("\n");
x1 = (-b + sqrt(D)) / (2 * a);
x2 = (-b - sqrt(D)) / (2 * a);
x = (-b) / 2 * a;
D1 = b*b-(4*a*c);
if (D > 0)
{
printf("x1: ");
printf("%f", x1);
printf("\n");
printf("x2: ");
printf("%f", x2);
printf("\n");
}
else if (D == 0)
{
printf("Csak egy megoldas van:");
printf("\n");
printf("x: ");
printf("%f", x);
}
else if (D < 0)
{
printf("Nincs megoldas mert a diszkriminans negativ!");
}
}





Ez így nem valami nagy hibakezelés, ha cak szájába rágod, hogy szám legyen. Szerintem a tanár is inkább arra gondolt, hogy addig kérjen egy együtthatót, amíg számot ad meg.
Esetleg még azt is le lehetne ellenőrizni, hogy el tudod-e tárolni az adott számot float-ként, de amúgy más nagyon nem kell.










A scanf format string nem ismeri a regexet, azzal ne is próbálkozz. Be kell olvasni, ha nem sikerült, akkor újra. Ezt addig, amíg be nem ír egy számot az illető.
Érdemes a %f köré szóközöket tenni.
Találtam egy kis segítséget:
#include <stdlib.h>
int clean_stdin()
{
while (getchar()!='\n');
return 1;
}
do
{
printf("\nb: ");
} while (((scanf("%f%c", &b, &cha)!=2 || cha!='\n') && clean_stdin()) || 0>b<0 || b>9999);
Ha ezekkel kiegészítem akkor ha nem számot írok ki újra kéri a b értékét(itt most működik negatívra, 0-ra, pozitívra). Csak még az a-ra nem sikerült megcsinálni, hogy a ne lehessen 0, de lehessen pozitív és negatív.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!