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

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

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

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

Δημοσίευσηαπό migf1 » 29 Ιαν 2012, 15:35

Star_Light έγραψε:

Εχω προβλημα με την εισοδο βασικα... ο κωδικας δουλευει μια χαρα οταν οριζω εξαρχης το μεγεθος του πινακα . ΚΟιτα οταν ευκαιρισεις
τον εχω απο πανω.

Τι πρόβλημα έχει στην είσοδο, δεν είδα κάτι.

έγραψε:
Eυχαριστω!!! Ουτως η αλλως σκεφτομαι να κανω επεκταση το ηδη υπάρχον προγραμμα με την ταξινομηση
ωστε να κανει και αναζητηση και ευρεση μεγιστου / ελαχιστου στοιχειου κτλπ.

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

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

Δημοσίευσηαπό Star_Light » 29 Ιαν 2012, 19:08

@migf1

δοκιμασε να τον τρεξεις ετσι

http://pastebin.com/u8WBAnZC

να δεις.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 29 Ιαν 2012, 19:22

δοκιμασα μεσω fgets να δωσω εισοδο αλλα το προβλημα ηταν οτι δεν ηξερα πως να περάσω ολοκληρο τον πίνακα δηλαδη να δέχεται εναν χαρακτηρα να τον αποθηκευει στον πινακα και μετα να τον μετατρεπει.... και αυτο για ολα τα στοιχεια του και επισης στον πιο κατω κωδικα μου εμφανιζει στην αρχη το 0 ενω δεν θελω.... λογικα διαβάζει και το enter

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

#include <stdio.h>
#include <stdlib.h>
#define N 255

int main()
{
char array[N];
char c;
int i=0;
int conv; //conventer
int count;

printf("Dwse ton ari8mo twn stoixeiwn: \n");
scanf("%d",&count);

for(; i!=count; i++)
{
printf("Give a number \n");
fgets(array,255,stdin);
sscanf(array,"%c",&c);
conv = atoi(array);
printf(" \n - voila - \n : %d " , conv );
}
return 0;
}



τεσπα παω να ψαχθώ σαν λυσασμένος παλι και θα επανέλθω δριμύτερος φυσικα -.-
το νου σας -.-

p.s Παλι η scanf χαλάει τη δουλειά.

edit Παλι η fgets το δημιουργει το προβλημα. Επειδη περιλαμβάνει και αυτη το '\n' το ρημάδι :D
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 00:14

Ρε συ, ένας αχταρμάς είναι όλα αυτά, δεν βγάζω άκρη. Πρέπει να μου περιγράψεις ποιο ακριβώς είναι το πρόβλημα και σε ποιον κώδικα αντιστοιχεί, και σε ποιο σημείο του κώδικα.

Στον έναν κώδικα ορίζεις πίνακα x[n] με το n undefined, στον άλλο κώδικα έχεις ένα string που το ονομάζεις array, το διαβάζεις με fgets() μετά πας και παίρνεις από αυτό μονάχα τον 1ο χαρακτήρα που δεν τον χρησιμοποιείς πουθενά, αλλά τυπώνεις το array τροποποιημένο σε int.

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

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

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 01:13

LOL :D

Καταρχην οι 2 κωδικες ειναι ξεχωριστοι μεταξυ τους. Απλα το παω βημα - βημα... Στο μυαλο μου το εχω ως εξης... πρωτα θα προσπαθησω να δουλεψω την εισοδο με προκαθορισμένη τιμη πχ

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

#define N 10


οκ αυτο το κατάφερα τρεχει μια χαρα ο κωδικας και ταξινομει τα στοιχεια χωρις σφαλματα....

στη συνεχεια ηθελα μεσω της scanf να δινει ο χρηστης καποια στοιχεια (το οριο βασικα) αλλα εχω πλεον λαθη σε αυτο οπως σου ειπα και πριν

και τελος μετα απο αυτο να επεξεργαζομαι την εισοδο σαν char και μετα να την μετατρεπω σε int.... με fgets / sscanf / atoi κτλπ
αλλα σε ενα ξεχωριστο πρωτα αρχειο
χωρις να το μπλεξω με τον bubble sort. Τελικα ηθελα να μην τα κανω κουλουβαχατα αλλα καταφερα το αντιθετο :D
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 01:21

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

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

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 17:26

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

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

int main()
{
char input[256];
int i=0;
int conv;

while(input[i]!='q')
{
printf(" \n Dwse enan arithmo : ");
fgets(input,256,stdin);
conv = atoi(input);

if(input[i]=='q')
break;

printf("\n O ari8mos pou edwses einai \n : %d " , conv );
}

printf("\n * Exit * ");
printf("\n * Have a nice day * ");

return 0;
}



Οκ με αυτο.

Βασικα τωρα θα ηθελα απλα να παιρνει σαν εισοδο τα στοιχεια στον πινακα
να τα μετατρεπει σε int και μετα να τα εκτυπώνει. Να αποθηκευονται και να κρατιουνται κανονικα μεσα στην διαταξη ομως
εδω κρατιεται μονο ενα και απλα εκτυπωνεται οσο παιζει το loop.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 18:16

Star_Light έγραψε:
Spoiler: show
Κώδικας: Επιλογή όλων

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

int main()
{
char input[256];
int i=0;
int conv;

while(input[i]!='q')
{
printf(" \n Dwse enan arithmo : ");
fgets(input,256,stdin);
conv = atoi(input);

if(input[i]=='q')
break;

printf("\n O ari8mos pou edwses einai \n : %d " , conv );
}

printf("\n * Exit * ");
printf("\n * Have a nice day * ");

return 0;
}


Οκ με αυτο.

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

char input[256];
int i=0;
...
while(input[i]!='q') {
...
if(input[i]=='q')
break;
...
}

πρέπει να γίνει...
Spoiler: show
Κώδικας: Επιλογή όλων

char input[256+1] = {'\0'};
...
while( input[0] != 'q' ) {
...
if (input[0] == 'q' )
break;
...
}

Κι ακόμα καλύτερα...

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

char input[256+1] = {'\0'};
...
for (;;) {
...
if (input[0] == 'q' )
break;
...
}


έγραψε:
Βασικα τωρα θα ηθελα απλα να παιρνει σαν εισοδο τα στοιχεια στον πινακα
να τα μετατρεπει σε int και μετα να τα εκτυπώνει. Να αποθηκευονται και να κρατιουνται κανονικα μεσα στην διαταξη ομως
εδω κρατιεται μονο ενα και απλα εκτυπωνεται οσο παιζει το loop.

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

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

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 18:31

Λογικα αυτο που προτεινεις ειναι για λογους ασφάλειας?
Οτι δηλαδη μολις τελειωσουμε με τον πινακα θα πρεπει στην πρωτη θεση
να υπάρχει το q?

Θα ξανακοιταξω αυτο που μου λες με την arrInt_read() . Ευχαριστω !
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 18:47

Star_Light έγραψε:Λογικα αυτο που προτεινεις ειναι για λογους ασφάλειας?
Οτι δηλαδη μολις τελειωσουμε με τον πινακα θα πρεπει στην πρωτη θεση
να υπάρχει το q?

Καμία σχέση :P

To input[0] είναι ο 1ος χαρακτήρας του c-string: input, το οποίο c-string input έχει διαβαστεί με την fgets().

ΥΓ. Γιατί δεν ασχολείσαι 1-2 μέρες με διάβασμα και ασκησούλες να ξεκαθαρίσεις μια και καλή τα c-strings να τελειώνεις;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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