• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyłapywanie błędów konwersji - Język C

Object Storage Arubacloud
0 głosów
163 wizyt
pytanie zadane 26 października 2016 w C i C++ przez zetnix Nowicjusz (140 p.)

Witam serdecznie,

napisałem program w języku C który pobiera zmienne jako argumenty wywołania programu. Argumenty te konwertują się na typ double. Chciałbym aby program kończył działanie w przypadku nieprawidłowej konwersji jeśli wpiszę mu np jakieś litery. Jak to zrobić?

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

int main(int argc, char *argv[])
{
if(argc != 4)
{
printf("Za mało lub za dużo argumentów.\nProszę podać 3 argumenty.\n\n");
return 1;
}
printf("Ilosc argumentów programu = %d\n", argc);
double a,b,c;

a=atof(argv[1]);

b=atof(argv[2]);

c=atof(argv[3]);

printf("a=%lf b=%lf c=%lf \n",a,b,c);
if(a==0)
{
printf("To nie jest funkcja kwadratowa.\n");
return 0;
}
double delta=b*b-4*a*c;
printf("delta=%lf\n",delta);
if(delta<0.0)
{
printf("Brak rozwiazania.\n");
return 0;
}
else if(delta==0.0)
{
printf("Jedno rozwiazanie: %lf\n", -b/(2*a));
return 0;
}
else
{
printf("Dwa rozwiazania: %lf oraz %lf\n", (((-b)-sqrt(delta))/(2*a)), (((-b)+sqrt(delta))/(2*a)));
}

return 0;
}

Proszę o pomoc.

 

1 odpowiedź

0 głosów
odpowiedź 26 października 2016 przez criss Mędrzec (172,590 p.)

http://www.cplusplus.com/reference/cstdlib/atof/

Funkcja zwraca 0 jeśli konwersja się nie udała. Dość dziwne informowanie o błędach (bo co jeśli chcesz przekonwertować "0"...), ale co zrobić..

1
komentarz 26 października 2016 przez zetnix Nowicjusz (140 p.)
Nie wiem czy dobrze to zastosowałem.Zmieniłem atof na strtod.Jeśli konwersja się nie powiedzie to funkcja zwraca zero tak? Jeśli tak jest to co zrobić by po wprowadzeniu 0 do zmiennej program jednak wykonał całe działanie.

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

int main(int argc, char *argv[])
{
if(argc != 4)
{
printf("Za mało lub za dużo argumentów.\nProszę podać 3 argumenty.\n\n");
return 1;
}
printf("Ilosc argumentów programu = %d\n", argc);
double a,b,c;

a=strtod(argv[1],NULL);
if(a==0.0)
{return 1;}
b=strtod(argv[2],NULL);

c=strtod(argv[3],NULL);

 

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 26 października 2017 w JavaScript przez Kuba Pyda Początkujący (310 p.)
0 głosów
1 odpowiedź 411 wizyt
pytanie zadane 5 września 2017 w C i C++ przez Kubusiek94 Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 10 kwietnia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

92,621 zapytań

141,477 odpowiedzi

319,817 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...