Μετατροπές τύπων δεδομένων

Σε πολλές περιπτώσεις τα αριθμητικά δεδομένα που παίρνουμε ή από το πληκτρολόγιο ή από ένα αρχείο ή από όποια άλλη συσκευή εισόδου, είναι σε μορφή συμβολοσειράς. Για παράδειγμα μπορεί να έχω: char value[] = {"3.14"};. Το ζητούμενο εδώ είναι να μετατρέψω τη συμβολοσειρά σε δεκαδική τιμή. Αυτό γίνεται χρησιμοποιώντας ειδικές συναρτήσεις για τη μετατροπή συμβολοσειρών σε αριθμητικές τιμές. Οι συναρτήσεις αυτές βρίσκονται στη βιβλιοθήκη stdlib.h.

Στον παρακάτω πίνακα εμφανίζονται οι πιο βασικές εντολές μετατροπής.

ΌνομαΜορφή συνάρτησηςΠεριγραφή
atofdouble atof(const char *str);Μετατρέπει συμβολοσειρά σε double
atoiint atoi(const char *str);Μετατρέπει συμβολοσειρά σε int
atollong int atol(const char *str);Μετατρέπει συμβολοσειρά σε long int

Παράδειγμα

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

	int main() {
		double total;
		char price[10];
		puts("Τιμή προϊόντος: ");
		gets(price);
		total = atof(price);
		printf ("Τιμή προϊόντος με Φ.Π.Α.: %.2lf\n", total*1.24);
		return 0;
	}

Πέρασμα ορισμάτων από την γραμμή εντολών

Όταν μεταγλωττίσουμε την εφαρμογή μας και δημιουργήσουμε το εκτελέσιμο αρχείο έστω test.exe ή test για linux, τότε για να το εκτελέσουμε πληκτρολογούμε την εντολή test και Enter στη γραμμή εντολών.

Τι γίνεται όμως αν θέλουμε να περάσουμε κάποια ορίσματα στην test δηλαδή να έχουμε μια παραμετροποιημένη test;

Για παράδειγμα έστω ότι έχω την εφαρμογή sum η οποία αθροίζει δύο ή περισσότερους αριθμούς.

Για να αθροίσω έστω τρείς αριθμούς μπορώ να πληκτρολογήσω την εντολή για παράδειγμα: sum 20 30 5.7 η οποία και θα μου επιστρέφει το αποτέλεσμα.

Για να ισχύει αυτό περνάμε τις εξής παραμέτρους στη συνάρτηση main: int main(int argc, char *argv[]). Η πρώτη παράμετρος δίνει τον αριθμό των ορισμάτων. Για παράδειγμα για την εντολή sum 20 30 5.7 θα έχουμε: argc = 4 (στον αριθμό των ορισμάτων προστίθεται ως όρισμα και το όνομα της εφαρμογής) και η δεύτερη παράμετρος είναι ένας πίνακας δεικτών με τις διευθύνσεις στις οποίες έχουν αποθηκευτεί οι τιμές των ορισμάτων.

Όλα τα ορίσματα αποθηκεύονται και διαβάζονται ως συμβολοσειρές και πρέπει να διαχειρίζονται από το πρόγραμμα ως τέτοιες.

Άρα, για το παράδειγμά μας μπορούμε να πούμε ότι: argv[1] = "20", argv[2] = "30" και argv[3] = "5.7".

Η διεύθυνση argv[0] δείχνει πάντα στο όνομα της εφαρμογής. Άρα για το παράδειγμά μας: argv[0] = "sum".

Επειδή η argv[0] χρησιμοποιείται πάντα για το όνομα της εφαρμογής, για να έχω ορίσματα θα πρέπει η τιμή argc να είναι μεγαλύτερη του 1.

Παράδειγμα

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

	int main(int argc, char *argv[]) {

		double sum = 0;
		int i;
		if(argc == 1) {
			puts("oops, no arguments supplied\n");
		} else if (argc == 2) {
			puts("oops, at least one more argument should be supplied\n");
		} else {
			for(i=1; i<argc; i++) {
				sum = sum + atof(argv[i]);
			}
			printf("sum: %.2f\n", sum);
		}

		return 0;
	}