Απορια σχετικα με τη χρηση της calloc

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
karetta_seaworld
Δημοσιεύσεις: 6
Εγγραφή: 31 Μαρ 2015 01:28

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από karetta_seaworld » 05 Απρ 2015 01:12

Να γραφει ενα προγραμμα στο οποιο να διαβαζετε ενα ακεραιο απο το πληκρτολογιο,τον num.Στη συνεχεια με την χρηση της calloc() να δεσμευεται χωρο για να τοποθετησετε num ακεραιους.Ν αεμφανισετε τα περιεχομενα του χωρου που δεσμευτηκε στην οθονη.Στη συνεχεια να διαβασετε num ακεραιους,τους οποιους να τοποθετησετε στον χωρο που δεσμευτηκε και να εμφανισετε ξανα τα περιεχομενα του χωρου αυτου στην οθονη.

Μας δινεται η εκφωνηση της παραπανω ασκησης.Η απορια μου ειναι η εξης :με την δευτερη τοποθετηση num ακεραιων στον χωρο που ειδη εχουμε δεσμευσει με την πρωτη χρηση της calloc,θα ξαναχρησιμοποιησουμε την calloc??Δηλαδη ο κωδικας θα ειναι καπως ετσι..??

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

int main()
{
int num;
int *ptr;
int i;
scanf("%d",&num);
ptr=(int*)calloc(num,sizeof(int));
for(i=0;i<num;i++){
printf("%d",*(ptr+i));}
for(i=0;i<num;i++){
scanf("%d",&num);}
ptr=(int*)calloc(num,sizeof(int));
printf("%d",*(ptr+i));
system("pause");
}

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από gvre » 05 Απρ 2015 15:47

Η άσκηση λέει:

1. Διάβασε τον num (scanf)
2. Δέσμευσε χώρο για num ακέραιους (calloc)
3. Εμφάνισε τα περιεχόμενα του χώρου (printf)
4. Αποθήκευσε στον χώρο τούς num ακέραιους (scanf)
5. Εμφάνισε τα περιεχόμενα του χώρου (printf)

Αντί system("pause") είναι προτιμότερο να χρησιμοποιήσεις την getchar().

Υ.Γ.
Όταν κάνεις post κώδικα, βάζε τον σε code block.
Δες τη διαφορά μεταξύ calloc και malloc.
Όταν τελειώσεις το πρόγραμμα, βάλε και καμία free για να είναι πιο σωστό.
To *(ptr+i) μπορείς να το απλοποιήσεις σε ptr.

Αυτό τί ακριβώς κάνει;

Κώδικας: Επιλογή όλων

for&#40;i = 0; i < num; i++&#41; 
    scanf&#40;"%d", &num&#41;;

karetta_seaworld
Δημοσιεύσεις: 6
Εγγραφή: 31 Μαρ 2015 01:28

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από karetta_seaworld » 05 Απρ 2015 17:29

Διαβαζει τους num ακεραιους που εχουν προηγουμενως δεσμευτει στην μνημη με την χρηση της calloc.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από servetas » 05 Απρ 2015 19:28

Αρχικά δεν μπορώ να καταλάβω τι ακριβώς κάνεις printf στην αρχή (γραμμή 11) αφού ακόμα δεν έχεις διαβάσει τους αριθμούς. ;) Επίσης, μπορείς να βάλεις έναν tmp pointer και να μην αλλάζεις τον pointer που σου επέστρεψε η calloc ούτως ώστε να μπορείς να εμφανίσεις ή να ξαναδιαβάσεις τους αριθμούς στα ίδια κελιά μνήμης. Η δεύτερη calloc απλά θα δεσμεύσει εκ νέου άλλες θέσεις μνήμης.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από gvre » 05 Απρ 2015 19:42

karetta_seaworld έγραψε:Διαβαζει τους num ακεραιους που εχουν προηγουμενως δεσμευτει στην μνημη με την χρηση της calloc.
Δεν κάνει αυτό, αλλά διαβάζει, για όσο χρόνο ικανοποιείται η συνθήκη i < num, έναν ακέραιο, τον οποίο τοποθετεί στη μεταβλητή num.

@servetas Την 1η printf την έβαλε ο καθηγητής για να δουν τη διαφορά της calloc από τη malloc. Επίσης, αν εξαιρέσεις τη 2η calloc, η οποία είναι περιττή, δεν αλλάζει σε άλλο σημείο ο pointer.

servetas
Δημοσιεύσεις: 304
Εγγραφή: 01 Φεβ 2010 15:08
Επικοινωνία:

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από servetas » 05 Απρ 2015 19:46

Έχεις απόλυτο δίκιο. Και εγώ ακόμα μαθαίνω και δεν το πρόσεξα καλά. Είδα ότι χρησιμοποιεί και το i. :)

karetta_seaworld
Δημοσιεύσεις: 6
Εγγραφή: 31 Μαρ 2015 01:28

Απορια σχετικα με τη χρηση της calloc

Δημοσίευση από karetta_seaworld » 10 Απρ 2015 20:12

Οποτε η λυση της ασκησης θα μπορουσε να ειναι αυτη ?


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



int main()
{
int num;
int *ptr;

int i;
scanf("%d",&num);
ptr=(int*)calloc(num,sizeof(int));
for(i=0;i<num;i++)
printf("%d",*(ptr+i));
printf("\n");
for(i=0;i<num;i++)
scanf("%d",&ptr);
for(i=0;i<num;i++)
printf("%d",*(ptr+i));
system("pause");
}
[/code][/code]

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες