Δημοσιεύτηκε: 29 Ιούλ 2011, 17:27
Star_Light έγραψε:σε πιο βασικες λεω εγω!!!
Κατι ακομα... εφοσον η sscanf επιστρεφει interger... τοτε πως εγω μεσα στην printf δινω %c μορφοποιηση??? δεν εχει σημασια ετσι? επιστρεφει απλα την αριθμητικη τιμη του χαρακτηρα που διαβαζει στο 1ο της ορισμα και εχει αποθηκευσει στο 3ο ε???
Όχι, όχι... η τιμή επιστροφής της sscanf είναι το πλήθος των επιτυχημένων εκχωρήσεων που έκανε, σύμφωνα με αυτά που της είπες στο 2ο όρισμά της.
Για παράδειγμα, αν εσύ θες να διαβάσεις π.χ. 2 int χ και y από τη κύρια είσοδο, διαβάζεις όλη τη γραμμή πρώτα στο inbuf και μετά για να "τραβήξεις" τις τιμές των x και y που χρειάζεσαι μέσα από το inbuf, γράφεις:
- Κώδικας: Επιλογή όλων
int x,y;
sscanf(inbuf, "%d %d", &x, &y);
Αν ο χρήστης σου γράψει ένα μόνο νούμερο και πατήσει ENTER τότε η sscanf θα βάλει το νούμερο στο x, θα βάλει 0 στο y και θα σου επιστρέψει 1. Ότι δηλαδή διάβασε με επιτυχία την 1 από τις 2 μεταβλητές που της είχες πει να διαβάσει.
Αν ο χρήστης σου γράψει 3 ή περισσότερα νούμερα (εννοείται ξεχωρισμένα με κενούς χαρακτήρες) τότε η sscanf θα βάλει το 1ο νούμερο στο x, το 2ο νούμερο στο y, θα αγνοήσει όλα τα υπόλοιπα και θα σου επιστρέψει 2. Ότι δηλαδή διάβασε επιτυχημένα τις 2 μεταβλητές που της είχες πει να διαβάσει.
Αν λοιπόν τροποποιήσεις τον παραπάνω κώδικα έτσι ώστε εκτός από τις μεταβλητές x και y να εκμεταλλεύεσαι και την τιμή επιστροφής της συνάρτησης, τότε θα μπορείς να ελέγξεις πόσες από τις μεταβλητές σου διαβάστηκαν επιτυχημένα ..
- Κώδικας: Επιλογή όλων
int x,y;
int n;
n = sscanf(inbuf, "%d %d", &x, &y);
if ( n == EOF)
// καμία μεταβλητή σου δεν διαβάστηκε με επιτυχία (π.χ. ο χρήστης πάτησε ENTER χωρίς να γράψει κανένα νούμερο)
else if (n == 1)
// μόνο μια μεταβλητή διαβάστηκε επιτυχημένα (συνήθως η 1η, η x δλδ σε μας)
else if (n == 2)
// διαβάστηκαν επιτυχημένα και οι 2 μεταβλητές μας (τυχόν εξτρά νούμερα στην είσοδο αγνοήθηκαν)
το EOF είναι ειδική περίπτωση (συνήθως ισοδυναμεί με -1) κι επιστρέφεται από την sscanf όταν δεν γίνει καμία εκχώρηση.