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

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

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

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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 19:26

stamatiou έγραψε:
Και μπορώ να βάλω το mod στη C;
Επίσης η αντιστοίχηση είναι για να δουλεύει η mod;


Τι ειναι το mod ξερεις? Ειναι το υπολοιπο... ποιος τελεστης δινει το υπολοιπο στην C ? :)
Οχι η αντιστοιχιση ειναι για να δουλέψει σωστα ο αλγοριθμος καθως καταλαβαινω. Το mod θα δουλεψει
ετσι και αλλιως απλα το προβλημα ισως παρουσιαστει σε αυτα που θα κρυπτογραφει ο κωδικας.
Γιατι ο Καισαρας υποθετει πως το ASCII σου ξεκιναει απο 0.
Γνώσεις ⇛ 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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 19:38

Ξεχασα το free βασικα και το if... τελοςπαντων παλι εχω προβλημα με την εισοδο....

τοσο μεγαλο προβλημα οτι θα υπηρχε στην C με την εισοδο ουτε που το φανταζομουν ποτε...
Γνώσεις ⇛ 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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 19:41

btw το εφτιαξα βάζοντας ενα \n

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


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Display_reverse(char *s);

int main()
{

char *s = {'\0'};
int len;


printf("Give the len: ");
scanf("%d\n" , &len);

printf(" Give a string : ");

s= calloc( len , sizeof(char));

if( s == NULL)
puts("Calloc failed");

fgets(s,len,stdin);
Display_reverse(s);

free(s);

return 0;
}
//----------------------------------------------------------------------
void Display_reverse(char *s)
{
char *cp;

for(cp = s; *cp!='\0' && *cp!='\n'; cp++)

putchar(*cp);

puts("\n");

return;
}


τωρα δηλαδη τι εγινε και εφτιαξε αυτο??? μου σφυριξε την λυση ενας προγραμματιστης απο ενα chat :P
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 17 Φεβ 2012, 19:44

Star_Light έγραψε:migf1 εχω αυτο εδω το προβλημα :
Spoiler: show
Κώδικας: Επιλογή όλων
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Display_reverse(char *s , int len);

int main()
{

char *s = {'\0'};
int len;


printf("Give the len: ");
scanf("%d" , &len);

printf(" Give a string : ");

s= calloc( len , sizeof(char));

fgets(s,len,stdin);
Display_reverse(s , len);

return 0;
}
//----------------------------------------------------------------------
void Display_reverse(char *s , int len)
{
char *cp;

for(cp = s; *cp!='\0' && *cp!='\n' && *cp!=len; cp++)

putchar(*cp);

puts("\n");

return;
}


σταματαει στο "Give a string" και δεν κανει τιποτε αλλο. Τι φταιει?

Αυτό εδώ τι είναι;
Κώδικας: Επιλογή όλων

char *s = {'\0'};

(εγώ ξέρω τι είναι, είναι το πρόβλημα... εσύ όμως καταλαβαίνεις τι κάνει αυτή η γραμμή; ... έχεις ξαναδεί κάπου αρχικοποίηση δείκτη με τέτοια παράσταση; )

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

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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 19:46

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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLEN (10+1)
void Display_reverse(char *s);

int main()
{

char *s = NULL;

printf(" Give a string : ");

s= calloc( MAXLEN , sizeof(char));

if( s == NULL)
puts("Calloc failed");

fgets(s,MAXLEN,stdin);
Display_reverse(s);

free(s);

return 0;
}
//----------------------------------------------------------------------
void Display_reverse(char *s)
{
char *cp;

for(cp = s; *cp!='\0' && *cp!='\n'; cp++)

putchar(*cp);

puts("\n");

return;
}


:D εχεις δικιο ρε συ migf1 αλλα ρε συ οταν εχεις την φουρια να δεις αμα θα τρεξει το προγραμματακι σου.... ε κανεις βλακώδη γκάφες.

Αρα το προβλημα υπηρχε μονο στην scanf και το len....

μεταξυ μας πολυ ωραιο πραγμα η δυναμικη δεσμευση μνήμης στα προγραμματα και αυτο ειναι και η ουσια της C αμα μαθω και πως ο χρηστης θα δινει επιλογη για να δεσμευσει οση μνημη θελει θα το χρησιμοποιω παντοτε ετσι !!!!!
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 17 Φεβ 2012, 19:48

Star_Light έγραψε:...
τωρα δηλαδη τι εγινε και εφτιαξε αυτο??? μου σφυριξε την λυση ενας προγραμματιστης απο ενα chat :P

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

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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 19:58

Δεν εχω δει . Το μονο που εχω δει ειναι αυτο *s = '\0' ; αλλα αυτο δεν μπορεις να το κανεις
σε δείκτη που δεν εχεις αρχικα αρχικοποιησει καπου. Ειναι και επικυνδινο :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

Δημοσίευσηαπό migf1 » 17 Φεβ 2012, 20:01

Ο σωστός κι ολοκληρωμένος κώδικας για αυτό που που πήγες να κάνεις είναι ο εξής:

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

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

#define MAXINPUT 256+1
int main( void )
{
char input[ MAXINPUT ] = {'\0'};
char *s = NULL;
int maxlen = 0; /* maximum length of s */
int len = 0; /* current length of s */

do {
printf("Give the len: ");
fgets( input, MAXINPUT, stdin );
maxlen = atoi(input);
} while ( maxlen < 1 );

maxlen++; /* for the '\0' at the end */
s = calloc(maxlen, sizeof(char));
if ( !s ) {
fputs("*** error, out of memory!\n", stderr);
exit( EXIT_FAILURE );
}

printf("Give a string : ");
fgets(s, maxlen, stdin);

len = strlen(s);
if ( s[ len-1 ] == '\n' )
s[ len-1 ] = '\0';

printf("You gave the string: %s\n", s);

system("pause");
free( s );
exit( EXIT_SUCCESS);
}


Μπορείς να καταλάβεις τι κάνει η κάθε του γραμμή και γιατί;
Τελευταία επεξεργασία από migf1 και 17 Φεβ 2012, 20:14, έχει επεξεργασθεί 2 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 17 Φεβ 2012, 20:07

φυσικα και καταλαβαινω τι κανει!!!!!!
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 17 Φεβ 2012, 20:08

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

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

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