condor1987 Δημοσ. 2 Νοεμβρίου 2005 Δημοσ. 2 Νοεμβρίου 2005 Θέλω να φτιάξω ένα προγραμματάκι στη c με χρήση της εντολής getchar.Το πρόγραμμα αυτό ζητάει και εκτυπώνει ένα string 9 χαρακτήρων κάθε χαρακτήρας του οποίου αποθηκεύεται σε ισομέγεθη διάταξη.Ο κώδικας είναι #include<stdio.h> main(){ char a[10]; int i; printf("insert string"); for (i=0;a!=EOF;i++) { a=getchar(); } printf("%s",a); } To executable αρχείο που προκύπτει για την ακρίβεια δεν κάνει τίποτα.Μπορει κανείς να μου πει που είναι το (λογικό?)λάθος?Εναλλακτικά πως μπορώ να χρησιμοποιήσω την εντολή putchar αντί για την printf ή αντίστοιχα τις συναρτήσεις gets και puts?
georgemarios Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 δοκιμασε a[0]=getchar(); for (i=1;a!=EOF;i++) { a=getchar(); } έτσι ωστε όταν ξεκινα το λουπ, το a να έχει πραγματι μια τιμή != EOF
technfreak Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 void print_string(char *a) { int i; for (i = 0;i<=10;a != '\0'; i++) putchar(a); } An kai den ime sigouros pisteuo pos autos o kodikas tha trexei... condor1987 ti ennoeis me to" Εναλλακτικά πως μπορώ να χρησιμοποιήσω την εντολή putchar αντί για την printf ή αντίστοιχα τις συναρτήσεις gets και puts?"
condor1987 Δημοσ. 3 Νοεμβρίου 2005 Μέλος Δημοσ. 3 Νοεμβρίου 2005 georgemarios και techfreak ευχαριστώ καταρχάς για την βοήθεια .Ομως το print_string(char *a) techfreak τι ακριβώς είναι? Oσο για αυτό που ρωτάς επειδή είμαι πρώτο έτος στη σχολή μηχανικών Η/Υ και Πληροφορικής στην Πάτρα τα έχω λίγο μπερδεμένα.Συγκεκριμένα ο καθηγητής είπε ότι το πρόγραμμα εκτελείται και με την χρηση της εντολής gets(a) αντι της getchar().Μήπως μπορείς να μου εξηγήσεις την διαφορά? To source του georgemarios "τρέχει" αλλά ο παρακάτω κώδικας εμφανιζει error στην gets(a); gets(a); for (i=1;a!=EOF;i++) { a=getchar(); }
georgemarios Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 το αντιστοιχο του κωδικα που σου εγραψα χρησιμοποιωντας την gets ειναι: gets(a) δηλαδη η gets διαβαζει μια ολοκληρη γραμμη μεχρι το πρωτο newline character ('\n') όμως αν αυτη η γραμμη ειναι μεγαλυτερη από το μεγεθος του a τότε θα χτυπησει ερορ την ωρα που τρεχει το προγραμμα για την ακριβεια, αν a ειναι array απο 10 characters τότε η μεγαλυτερη γραμμη που μπορεις να διαβαζεις χωρις σφαλμα ειναι 9 χαρακτηρες (γιατι πρεπει να υπαρχει χωρος για τον τελευταιο \n χαρακτηρα τον οποιο η gets τον μετατρεπει σε \0 για να σηματοδωτησει τον τερματισμο του στρινγ) Η συναρτηση print_string(char *a) που σου εγραψε ο techfreak γραφει στην οθονη γραμμα-γραμμα τα περιεχομενα του a. ΕΙναι το ιδιο σαν να λες puts(a) οποτε για να διαβασεις ενα στρινγ 9 χαρακτηρων απο την οθονη και να το τυπωσεις λες gets(a) και μετα puts(a) αρκει να μη γραψεις περισσοτερους απο 9 χαρακτηρες, θα σκασει
technfreak Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 Η χρήση της πιο απλής συνάρτησης gets γενικά πρέπει να αποφεύγεται διότι οδηγεί σε ανασφαλή προγράμματα. Για αυτό σου προτείνω την fgets(buff, n, stdin) Η συνάρτηση fgets(buff, n, stdin) διαβάζει από την είσοδο του προγράμματος (π.χ. το πληκτρολόγιο) μια γραμμή από n-1 το πολύ χαρακτήρες και του τοποθετεί στη θέση buff. Αν η fgets συναντήσει το τέλος του αρχείου επιστρέφει 0, αλλιώς επιστρέφει την τιμή buff. Αντίστοιχα, μπορούμε να τυπώσουμε ;ένα str με τη χρήση της συνάρτησης printf("%s", str);. Το παρακάτω παράδειγμα διαβάζει μια γραμμή από το πληκτρολόγιο (μέχρι το \n) και την τυπώνει: #include <stdio.h> main() { char α[10]; fgets(α, sizeof(α), stdin); printf("You entered: %s\n", α); }
greekw Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 To provlima den einai oti den mpainei sti loopa (for) logw EOF. To provlima einai oti ginetai ena extend ston pinaka ... dld enw ton exeis orisei a[10], i loopa grafei kai sto a[11] ktl ktl.. ara de vriskei EOF ... Kai mia erwtisi: ston pinaka a[10] efoson iparxoun 11 theseis (giati ksekinaei apo a[0]) giati xwraei mono 9 chars kai oxi 10?
georgemarios Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 Kai mia erwtisi: ston pinaka a[10] efoson iparxoun 11 theseis (giati ksekinaei apo a[0']) giati xwraei mono 9 chars kai oxi 10? στον πινακα a[10] χωρανε 10 χαρακτηρες ο τελευταιος απο τους οποιους πρεπει να ειναι ο '\0' που σηματοδοτει το τελος του string. Αρα περισσευουν 9.... Η αριθμηση στους πινακες παει απο το 0 μεχρι το μεγεθος του πινακα μειον 1, αρα εδω a[0...9]
powerfty Δημοσ. 3 Νοεμβρίου 2005 Δημοσ. 3 Νοεμβρίου 2005 Θέλω να φτιάξω ένα προγραμματάκι στη c με χρήση της εντολής getchar.Το πρόγραμμα αυτό ζητάει και εκτυπώνει ένα string 9 χαρακτήρων κάθε χαρακτήρας του οποίου αποθηκεύεται σε ισομέγεθη διάταξη.Ο κώδικας είναι#include<stdio.h> main(){ char a[10]; int i; printf("insert string"); for (i=0;a!=EOF;i++) { a=getchar(); } printf("%s"' date='a[i']); } To executable αρχείο που προκύπτει για την ακρίβεια δεν κάνει τίποτα.Μπορει κανείς να μου πει που είναι το (λογικό?)λάθος?Εναλλακτικά πως μπορώ να χρησιμοποιήσω την εντολή putchar αντί για την printf ή αντίστοιχα τις συναρτήσεις gets και puts? Gia na kanei to programma auto pou thes me ti xrisi mono tis getchar tote o katwthi kwdikas einai auto pou zitas: #include <stdio.h> int main(char* argv[], int args) { char c; int i = 0; char a[10]; printf("Please give a 10 character string\n\n"); while(((c = getchar()) != EOF) && (i < 10)) { a[i++] = c; } a = '\0'; printf("\nData stored in an array of characters: %s\n", a); system("pause"); return 0; } H while trexei mono gia tous 10 prwtous xaraktires. Diladi apo to pliktrologio mporeis na dwseis san eisodo ena string parapanw apo 10 xaraktires alla to a tha periexei mono tous 10 prwtous. Oi ypoloipoi tha agnoithoun. Paradeigma: Please give a 10 character string Hello, world! Data stored in an array of characters: Hello, wor Press any key to continue . . . H leitourgia tou einai paromoia me auti tis fgets aplws edw vlepeis kalytera pws leitourgei auto pou thes me ti xrisi mono mias gnwstis synartisis, getchar().
eleonora Δημοσ. 4 Νοεμβρίου 2005 Δημοσ. 4 Νοεμβρίου 2005 Ωχ...και εγω τα εχω βρει πολυ σκουρα στον προγραμματισμο...Μπορεί κάποιος να μου πει τι ειναι τα αστερακια που βάζεται στις μεταβλητές πχ *char ?Και κατι άλλο :ποιος μπορεί να με δώσει καμιά ιδέα για να γράψω ένα πρόγραμμα που να διαβάζει και να αποθηκεύει το επώνυμο και το βαθμό 20 μαθητών σε πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή ;;; Στη συνέχεια πρέπει για κάθε μαθητή να τυπώνει στην οθόνη το επώνυμό του,το βαθμό του, καθώς και το χαρακτηρισμό επίδοσης ανάλογα με το βαθμό του. Ο χαρακτηρισμός επίδοσης είναι: 9<βαθμός<=12 μέτρια 12<βαθμός<=15 καλά 15<βαθμός<=18 πολύ καλά 28<βαθμός<=20 άριστα Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης,δηλαδή πολύ καλά, κτλ. BOHΘEIA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
technfreak Δημοσ. 4 Νοεμβρίου 2005 Δημοσ. 4 Νοεμβρίου 2005 to programa sou eleonora ine #include < stdio.h > struct data{ char epon[20]; int grade; }bathmoi[10]; void main() { int i,sum_m=0,sum_k=0,sum_pk=0,sum_a=0; char epidosi[15]; for (i=0;i<10;i++) { printf ("\n Dose to %do eponimo: ",i+1); scanf ("%s",bathmoi.epon); printf ("\n Dose to %d bathmo : ",i+1); scanf ("%d",&bathmoi.grade); } for (i=0;i<10;i++) { if (bathmoi.grade>9 && bathmoi.grade<=12) { printf ("\n %s %d metria",bathmoi.epon,bathmoi.grade); sum_m+=1; } if (bathmoi.grd>12 && bathmoi.grade<=15) { printf ("\n %s %d kala",bathmoi.epon,bathmoi.grade); sum_k+=1; } if (bathmoi.grade>15 && bathmoi.grade<=18) { printf ("\n %s %d poli kala",bathmoi.epon,bathmoi.grade); sum_pk+=1; } if (bathmoi.grade>18 && bathmoi.grade<=20) { printf ("\n %s %d arista",bathmoi.epon,bathmoi.grade); sum_a+=1; } } printf ("\n Metrioi mathites : %d",sum_m); printf ("\n Kaloi mathites : %d",sum_k); printf ("\n Poli Kaloi mathites: %d",sum_pk); printf ("\n Aristoi mathites : %d",sum_a); }
boutsak Δημοσ. 4 Νοεμβρίου 2005 Δημοσ. 4 Νοεμβρίου 2005 Ωχ...και εγω τα εχω βρει πολυ σκουρα στον προγραμματισμο...Μπορεί κάποιος να μου πει τι ειναι τα αστερακια που βάζεται στις μεταβλητές πχ *char ?Και κατι άλλο :ποιος μπορεί να με δώσει καμιά ιδέα για να γράψω ένα πρόγραμμα που να διαβάζει και να αποθηκεύει το επώνυμο και το βαθμό 20 μαθητών σε πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή ;;; Στη συνέχεια πρέπει για κάθε μαθητή να τυπώνει στην οθόνη το επώνυμό του' date='το βαθμό του, καθώς και το χαρακτηρισμό επίδοσης ανάλογα με το βαθμό του. Ο χαρακτηρισμός επίδοσης είναι: 9<βαθμός<=12 μέτρια 12<βαθμός<=15 καλά 15<βαθμός<=18 πολύ καλά 28<βαθμός<=20 άριστα Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης,δηλαδή πολύ καλά, κτλ. BOHΘEIA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [/quote'] Katarxhn ta asterakia ayta legontai pointers kai sth c einai apo ta pleon basika pragmata pou prepei na ma8eis Se mia frash h mia paragrafo den mporw na sou e3hghsw. Ena proxeiro tutorial pou brhka sto internet einai to http://pw1.netcom.com/~tjensen/ptr/pointers.htm. Gia to problhma twra: mporeis na ftia3eis mia domh as thn onomasoume student ws: struct {char* surname, int grade} student Sth synexeia dhlwneis ena pinaka me 20 stoixeia typou struct student. Mporeis sth synexeia na diatrexeis ayton ton pinaka me ena for loop kai mesa se ayto na e3etazeis ka8e stoixeio tou pinaka, kanontas print sthn o8onh to epwnymo k me mia if blepeis se poio diasthma ari8mwn einai o ba8mos tou. Proxeira: . .. ... struct student mystudents[20]; int counter; for(counter=0;counter<20;counter++) mystudents[counter].surname = (char*)malloc(sizeof(char)*50); /*prosoxh, prepei na ginei allocation mnhmhs parapanw*/ scanf("%d", &mystudents[0].grade]; scanf("%s", &mystudent[0].surname); for(counter=0;counter<=19;counter++){ printf("surnmame: %s\n", mystudent[counter].surname); /*edw elegxeis thn timh ka8e fora tou ba8mou kai analogws ektypwneis*/ 8a se symbouleva pantws na diabaseis kai gia tis domes prin asxolh8eis k grapeis to programma sou
eleonora Δημοσ. 5 Νοεμβρίου 2005 Δημοσ. 5 Νοεμβρίου 2005 euxaristo doutsak kai technfreak gia tin apantisi.kai mia akoma erotisi :pos boro na kano elegxo me ena programmataki an ena string mporei na diabasti kanonika kai anapoda ke na bgeni to idio noima (ETTkkTTE-ETTkkTTE) ke sti sinexia na metatrepo ta kefalea tou string se mikra ke antistrofa??
GIOVANNA Δημοσ. 5 Νοεμβρίου 2005 Δημοσ. 5 Νοεμβρίου 2005 euxaristo doutsak kai technfreak gia tin apantisi.kai mia akoma erotisi os boro na kano elegxo me ena programmataki an ena string mporei na diabasti kanonika kai anapoda ke na bgeni to idio noima (ETTkkTTE-ETTkkTTE) ke sti sinexia na metatrepo ta kefalea tou string se mikra ke antistrofa?? Επεξεργασία κειμένου (xi) Μετατροπή κεφαλαίων σε μικρά function lowercase(ch : char) : char; begin if (ch>='A') and (ch<='Z') then lowercase := chr(ord(ch) - ord('A') + ord('a')) else lowercase := ch end Μετατροπή μικρών σε κεφαλαία, ομοίως if (ch>='a') and (ch<='z') then uppercase := chr(ord(ch) - ord('a') + ord('A')) else uppercase := ch EGO PANTOS DEN KATALABAINO TIPOTA APO AYTA...STO INTERNET TYXAIA TA BRIKA
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.