Προς το περιεχόμενο

EkkΛΗΣΗ ΓΙΑ ΒΟΗΘΕΙΑ


condor1987

Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω να φτιάξω ένα προγραμματάκι στη 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?

Δημοσ.

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?"

Δημοσ.

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();

}

Δημοσ.

το αντιστοιχο του κωδικα που σου εγραψα χρησιμοποιωντας την 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 χαρακτηρες, θα σκασει

Δημοσ.

Η χρήση της πιο απλής συνάρτησης 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", α);

}

Δημοσ.

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?

Δημοσ.
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]

Δημοσ.
Θέλω να φτιάξω ένα προγραμματάκι στη 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().

Δημοσ.

Ωχ...και εγω τα εχω βρει πολυ σκουρα στον προγραμματισμο...Μπορεί κάποιος να μου πει τι ειναι τα αστερακια που βάζεται στις μεταβλητές πχ *char ?Και κατι άλλο :ποιος μπορεί να με δώσει καμιά ιδέα για να γράψω ένα πρόγραμμα που να διαβάζει και να αποθηκεύει το επώνυμο και το βαθμό 20 μαθητών σε πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή ;;;

Στη συνέχεια πρέπει για κάθε μαθητή να τυπώνει στην οθόνη το επώνυμό του,το βαθμό του,

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

Ο χαρακτηρισμός επίδοσης είναι:

9<βαθμός<=12 μέτρια

12<βαθμός<=15 καλά

15<βαθμός<=18 πολύ καλά

28<βαθμός<=20 άριστα

Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης,δηλαδή

πολύ καλά, κτλ.

BOHΘEIA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :)

Δημοσ.

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);

}

Δημοσ.
Ωχ...και εγω τα εχω βρει πολυ σκουρα στον προγραμματισμο...Μπορεί κάποιος να μου πει τι ειναι τα αστερακια που βάζεται στις μεταβλητές πχ *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

Δημοσ.

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??

Δημοσ.
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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...