Kezdőoldal » Számítástechnika » Programozás » Hogy lehet a bekérendő adatoka...

Hogy lehet a bekérendő adatokat csak számra korlátozni?

Figyelt kérdés

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!");

}



}



2014. febr. 21. 11:55
 1/5 A kérdező kommentje:
Talán ez kell? scanf("%[0-9a-fA-F]",a); e helyett: scanf("%f", &a); mert nem működik
2014. febr. 21. 12:25
 2/5 anonim ***** válasza:

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.

2014. febr. 21. 14:06
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
(Amúgy azt kell kihasználni, hogy a scanf visszatér a beolvasott adatok számával, ha nem tudott beolvasni egy számot sem, akkor 0-val, és ezt le tudod kezelni már)
2014. febr. 21. 14:13
Hasznos számodra ez a válasz?
 4/5 iostream ***** válasza:

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.

2014. febr. 21. 15:11
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:

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.

2014. febr. 21. 15:55

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!