Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 05 Ιούλ 2011, 13:04

Παιδιά, έχ μια αππορία για την fscanf και γενικά για όλες αυτές τις συναρτήσεις που διαβάζουν αρχεία. Έχουμε ένα αυτόν τον κώδικα:
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fp;
int i,ar;
fp=fopen("tyxaioi.txt","r");
if (fp==NULL)
{
puts("Provlima sto anoigma toy arxeioy");
exit(2);
}
for(i=1;i<=100;i++)
{
fscanf(fp,"%d",&ar);
printf("%d\n",ar);
}
fclose(fp);
}

Kαι η αππορία μου είναι η εξής. Η scanf στο for loop πώς και προχωράει χαρακτήρα μόνη της; δηλαδή πάντα όταν ξαναδιαβάζει ένα αρχείο προχωρά από μόνη της στον επόμενο χαρακτήρα;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 05 Ιούλ 2011, 13:40

Ναι, προχωράει τόσες θέσεις όσες αντιστοιχούν στον τύπο της μεταβλητής που το βάζεις να διαβάσεις με την fscanf().
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 05 Ιούλ 2011, 13:55

migf1 έγραψε:Ναι, προχωράει τόσες θέσεις όσες αντιστοιχούν στον τύπο της μεταβλητής που το βάζεις να διαβάσεις με την fscanf().

Οκ ευχαριστώ
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Qdata » 05 Ιούλ 2011, 14:31

Η εκφώνηση μια άσκησης είναι:
έγραψε:Να γραφεί πρόγραμμα το οποίο να ζητάει τρεις ακέραιους αριθμούς και να
εμφανίζει το μεγαλύτερο από αυτούς.


Το πρόγραμμα που έγραψα:
Κώδικας: Επιλογή όλων
#include <stdio.h>

main()
{
int a,b,c,max;
printf("Δώσε 3 αριθμούς: ");
scanf("%d %d %d", &a,&b,&c);
if (a>b)
max=a;
else
max=b;
if (max>c)
printf("Ο μεγαλύτερος από τους αριθμούς %d, %d και %d είναι ο: %d\n",a,b,c,max);
else
printf("Ο μεγαλύτερος από τους αριθμούς %d, %d και %d είναι ο: %d\n",a,b,c,c);
}


Ο μεταγλωττιστής gcc δεν πετάει κανένα σφάλμα.Αλλά το άτομα που έδωσες την άσκηση έδωσες αυτή την λύση:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
main()
{
int a,b,c,max;
scanf("%d %d %d",&a,&b,&c);
if(a>b)
max=a;
else
max=b;
if(max>c)
printf("%d\n",max);
else
printf("%d\n",c);
}


Γιατί εισάγει και το stdlib.h ;
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 05 Ιούλ 2011, 14:39

Δεν χρειάζεται
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό simosx » 05 Ιούλ 2011, 14:40

Qdata έγραψε:

Γιατί εισάγει και το stdlib.h ;


Δεν υπάρχει λόγος να μπει το stdlib.h στο πρόγραμμα αυτό.

Μια καλή πρακτική (όταν μαθαίνουμε) είναι να γράφουμε τις συναρτήσεις που χρησιμοποιούμε, π.χ.

Κώδικας: Επιλογή όλων
#include <stdio.h> /* Για printf(), scanf() */

οπότε ξέρουμε ανά πάσα στιγμή τις απαιτήσεις του προγράμματος.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Qdata » 05 Ιούλ 2011, 14:41

Το έχω δει και άλλου αυτό ενώ γίνετε και χωρίς να το εισάγεις.Πχ το stdio.h περιέχει μέσα συναρτήσεις εισόδου-εξόδου κτλ.Το stdlib.h τι περιέχει και πότε χρειάζεται;
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό simosx » 05 Ιούλ 2011, 14:45

Qdata έγραψε:Το έχω δει και άλλου αυτό ενώ γίνετε και χωρίς να το εισάγεις.Πχ το stdio.h περιέχει μέσα συναρτήσεις εισόδου-εξόδου κτλ.Το stdlib.h τι περιέχει και πότε χρειάζεται;


Πράγματι, το πρόγραμμα μπορεί να μεταγλωττιστεί αν δε βάλεις π.χ. #include <stdio.h>, ωστόσο είναι κάτι που σχετίζεται με τον μεταγλωττιστή.

Στο stdlib.h έχει συναρτήσεις συστήματος, όπως την exit().

Προσθέτεις τα κατάλληλα αρχεία κεφαλίδας αν τα χρειάζεσαι στο πρόγραμμά σου. Εγκυκλοπαιδικά, θα μπορούσες να κάνεις include όλα τα αρχεία .h, ωστόσο το θέμα είναι να είναι σε θέση να διαπιστώσει κάποιος την αντιστοιχία συναρτήσεων με τα αρχεία κεφαλίδων.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 05 Ιούλ 2011, 14:55

Μπορείς να δεις στη Wikipedia τις σταθερές, τους τύπους και τα πρότυπα των συναρτήσεων που ορίζονται μέσα στο stdlib.h: http://en.wikipedia.org/wiki/Stdlib.h (ή μπορείς να ανοίξεις απευθείας το αρχείο /include/stdlib.h από την εγκατάσταση του gcc)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Qdata » 05 Ιούλ 2011, 14:57

Κατάλαβα τι γίνετε τώρα.Σας ευχαριστώ πάρα πολύ simosx και migf1 ! :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι