anemelos4 Δημοσ. 26 Νοεμβρίου 2009 Δημοσ. 26 Νοεμβρίου 2009 Καλησπέρα, Εχώ να φτιάξω ενα πρόγραμμα που κανει το εξης: Γράψτε µια συνάρτηση find_last_char η οποία παίρνει ως παραµέτρους µια συµβολοσειρά και ένα χαρακτήρα, βρίσκει την τελευταία εµφάνιση του χαρακτήρα στη συµβολοσειρά και επιστρέφει ένα δείκτη σε αυτόν. Αν ο χαρακτήρας δεν εµφανίζεται στη συµβολοσειρά, επιστρέφει NULL. Απαγορεύεται να χρησιµοποιήσετε συναρτήσεις συµβολοσειρών από τη βιβλιοθήκη της C εκτός από την strlen. Απαγορεύεται η χρήση του τελεστή [ ]. Γράψτε µια συνάρτηση main η οποία παρουσιάζει το παρακάτω µενού στο χρήστη: 1. find last char 2. reverse Αν ο χρήστης επιλέξει 1, του ζητά: "Enter string: " και διαβάζει µια συµβολοσειρά µεγέθους µέχρι 20 και ακολούθως "Enter character: " και διαβάζει ένα χαρακτήρα. Μετά, καλεί τη συνάρτηση find_last_char και εκτυπώνει στην οθόνη την τιµή που επιστρέφει η συνάρτηση µε %s. Το κανω compile κανονικα (o compiler δεν μου βγαζει errors ή warnings) αλλα οταν το τρεχω μου βγαζει Segmentation fault:mad: δοκιμαζω με debugger να βρω το λαθος αλλα τιποτα μπορει κανεις να μου δωσει ενα χερι βοηθειας? Ευχαριστώ! P.S Μπορει το λαθος να ειναι προφανες απλα τωρα μπηκαν στην ζωη μου οι pointers (ειναι hardcore οι ατιμοι) και προσπαθω να καταλαβω τι παιζει! > /*...*/ #include <stdio.h> char b; char *find_last_char(char *s,char x); int main (int argc,char *argv[]){ int choice; char *str,ch,*a; printf("1. find last char \n2. reverse \n"); scanf ("%d",&choice); if (choice == 1){ printf ("Enter a string: "); scanf ("%20s",str); printf ("Enter a char: "); scanf (" %c",&ch); a=find_last_char(str,ch); printf ("%s",a); return 0; } return 0; } char *find_last_char(char *s,char x){ int flag=0; while (*s){ if(*s==x){ b=x; flag=1 ; } s++; } if (flag==0){ return (NULL); } else { return &b; } }
bab1s Δημοσ. 26 Νοεμβρίου 2009 Δημοσ. 26 Νοεμβρίου 2009 Το πρόβλημα είναι ότι δεν έχεις δεσμεύσει χώρο για το str οπότε σου κρεμάει... Χρησιμοποίησε τη malloc και θα είσαι οκ!
virxen75 Δημοσ. 26 Νοεμβρίου 2009 Δημοσ. 26 Νοεμβρίου 2009 Το πρόβλημα είναι ότι δεν έχεις δεσμεύσει χώρο για το str οπότε σου κρεμάει... Χρησιμοποίησε τη malloc και θα είσαι οκ! σωστό δες τις αλλαγές στον κώδικα σου > #include <stdio.h> [color="Red"]#include <malloc.h>[/color] char b; char *find_last_char(char *s,char x); int main (int argc,char *argv[]){ int choice; char *str,ch,*a; [color="Red"]str=(char *) malloc(20*sizeof(char));[/color] printf("1. find last char \n2. reverse \n"); scanf ("%d",&choice); if (choice == 1){ printf ("Enter a string: "); scanf ("%s",str); printf ("Enter a char: "); scanf (" %c",&ch); a=find_last_char(str,ch); printf ("%s",a); } return 0; } char *find_last_char(char *s,char x){ int flag=0; while (*s){ if(*s==x){ b=x; flag=1 ; } s++; } if (flag==0){ return (NULL); } else { return &b; } }
pinball_elf Δημοσ. 27 Νοεμβρίου 2009 Δημοσ. 27 Νοεμβρίου 2009 Μία πιο optimized λύση: > #include <stdio.h> [color="Red"]#include <stdlib.h>[/color] char *find_last_char(char *s,char x); int main (int argc,char *argv[]) { int choice; char *str, ch, *a; str=(char *) malloc(20*sizeof(char)); printf("1. find last char \n2. reverse \n"); scanf ("%d",&choice); if (choice == 1) { printf ("Enter a string: "); scanf ("%s",str); printf ("Enter a char: "); scanf (" %c",&ch); a = find_last_char(str,ch); [color="Red"] if (a != NULL) printf ("%s\n", a); else printf ("not found\n"); [/color] } return 0; } char * find_last_char(char *s,char x) {[color="Red"] char *p = NULL; while (*s) { if(*s==x) p=s; s++; } return p;[/color] }
anemelos4 Δημοσ. 27 Νοεμβρίου 2009 Μέλος Δημοσ. 27 Νοεμβρίου 2009 Οκ το βρηκα ευχαριστω πολυ για την βοηθεια σας παιδια!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.