Tak jak w temacie. Ten zapis niestety nie działa:
int main(int argc, long double *argv)
Tak jak w temacie. Ten zapis niestety nie działa:
int main(int argc, long double *argv)
atof(3), strtof(3). No bo chyba nie w ten sposób, co pokazałeś?
Do main przekazywany jest niestety tylko char*
. Jedyne co możesz z tym zrobić to spróbować go skomentować i ewentualnie napisać informacje że "podano niewłaściwe dane".
Prosto ze specyfikacji standardu c11
The function called at program startup is named main.
The implementation declares no prototype for this function.
It shall be defined with a return type of int and with no parameters:int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent
Jak chcesz wczytać wartość float to robisz tak
(kod uproszczony bez jakiegokolwiek sprawdzania poprawności danych)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
double d = atof(argv[1]);
printf("wczytana liczba: %lf\n", d);
return 0;
}
I wywołanie
$ ./a.out 5.643
wczytana liczba: 5.643000
Oczywiście zawsze należy sprawdzać poprawność wczytywanych parametrów z linii komend.
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
double a = stod(argv[1]);
cout << a;
}
stod
jest jednak dopiero od C++11, więc trzeba włączyć w kompilatorze obsługę go. (g++: -std=c++0x
).
Prawidłowy standard od gcc-4.7 jest -std=c++11
-std=c++0x
był poligonem doświadczalnym dla c++11
strtod ew można jeszcze użyć (jeśli mamy stary kompilator, albo chcemy zrobić to w C