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

Ερωτήσεις για C


capoelo

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

Βασικά ρωτάω επειδη έγραψα λίγο κώδικα ο οποίος άν έχεις πχ εισοδο  :

 

Kwstas Kwstopoulos

 

τοτε θα έχεις σαν έξοδο :

 

Kwstopoulos, K.

 

 

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define STR_LEN 100
void read_line( char * , int );
int main(void)
{
    char s1[STR_LEN+1] = {'\0'};
    char s2[STR_LEN+1] = {'\0'};
    char tmp[STR_LEN + 1]= {'\0'};
    
    printf(" Give the first name : ");
    read_line( s1 , STR_LEN);
    printf("\n Give the last name : ");
    read_line( s2 , STR_LEN);
    
    strcpy ( tmp , s1 );
    strcpy ( s1 , s2 );
    strcat( s1 , ", ");
    strcpy ( s2 , tmp);
    
    printf("Name: %s" , s1);
    putchar( (int) s2[0]);
    putchar('.');
    
    return 0;
}
void read_line(char name[] , int n)
{
    int ch , i=0;
    
    while( (ch = getchar()) != '\n' ) {
        
        if( i )
        ch = tolower( ch );
        
        if( !isalpha(ch)) {
        printf(" \n *Rejected* '%c' is not a letter " , ch);
        continue;
        }  
        
        if(i < n )
        name[i++] = ch;
    }
        
        name[i] = '\0';
}
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 1,6k
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Υπάρχει κάποια παρόμοια συνάρτηση με την os της python ;

Τι κάνει η os στην python?

 

Μα δεν ειναι το ιδιο με την getchar που ειχαμε συζητησει παλια???

 

οτι δηλαδη ειναι πιο σωστο να λες int c

 

getchar( c ) παρα char c .

Αν δεν σκοπεύεις να χρησιμοποιήσεις "μη char" τιμές μέσα στο s, δεν χρειάζεσαι το cast (άσε που γίνεται έτσι κι αλλιώς implicitly).

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν είναι συνάρτηση, είναι ολόκληρη βιβλιοθήκη με πλειάδα συναρτήσεων για κλήσεις προς το underlying OS.

 

Ποιες από όλες τις συναρτήσεις του python.os module σε ενδιαφέρουν; Βλέποντας στα πεταχτά τί περίπου περιλαμβάνει, δε νομίζω πως υπάρχει 1-προς-1 αντιστοιχία... :-/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 3 εβδομάδες αργότερα...
Δημοσ. (επεξεργασμένο)

Καλησπέρα παιδια τι κανουμε ??? :)

 

Έχω μερικες αποριες στον Προεπεξεργαστη .... τι εννοει με την φράση :

 

It is reliance on a preprocessor makes C (along with C++) unique among major programming languages ?

 

Έπειτα οταν λέει οτι ο προεπεξεργαστης εχει μικρη γνωση της C και ως αποτελεσμα αυτου ειναι ευκολο να δημιουργηθουν μη εγκυρα προγραμματα καθως εκτελουνται οι οδηγιες του ενα παραδειγμα πανω σε αυτο θα μπορουσε να ειναι και κατι σαν αυτο

 

 

#define NUM 1000 ;;

 

Οταν λέει επισης : Another use of __func__ : it can be passed to a function to let it know the name of the function that called it.

 

Ένα παράδειγμα σε αυτο???? Τι εννοει???

Επεξ/σία από Star_Light
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έπειτα οταν λέει οτι ο προεπεξεργαστης εχει μικρη γνωση της C και ως αποτελεσμα αυτου ειναι ευκολο να δημιουργηθουν μη εγκυρα προγραμματα καθως εκτελουνται οι οδηγιες του ενα παραδειγμα πανω σε αυτο θα μπορουσε να ειναι και κατι σαν αυτο

 

 

 

#define NUM 1000 ;;

 

 

#include <stdio.h>

#define main kotsos

int main(void)
{
	return 0;
}
Εννοεί ακριβώς αυτό που λέει δηλαδή ότι ο preprocessor δεν γνωρίζει από C και απλά κάνει λεξικογραφική αντικατάσταση. Στο παραπάνω κώδικα ο gcc δίνει μήνυμα λάθους "undefined reference to `main'" δηλαδή δεν βρίσκει main. Ο preprocessor έκανε μια περασιά το αρχείο και όπου βρήκε τη λέξη main την αντικατέστησε με τη λέξη kotsos χωρίς να πει "ρε c η main χρειάζεται οπότε δεν θα την αλλάξω" γιατί ακριβώς δεν ξέρει από C.

Οταν λέει επισης : Another use of __func__ : it can be passed to a function to let it know the name of the function that called it.

 

Ένα παράδειγμα σε αυτο???? Τι εννοει???

#include <stdio.h>

void g(void);

int main(void)
{
	g();
	
	return 0;
}

void g(void)
{
	printf("I am %s()\n", __func__);
}

Έξοδος: I am g()
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Οταν λέει επισης : Another use of __func__ : it can be passed to a function to let it know the name of the function that called it.

 

Ένα παράδειγμα σε αυτο???? Τι εννοει???

 

Δες κι αυτό:

#include <stdio.h>

void g(const char* func)
{    
    fprintf(stderr,"Called by %s().\n",func);
    if(func == __func__) return;
    g(__func__);
    
    return;
}

void f()
{
    g(__func__);
}

main()
{
    g(__func__);
    f();
    return 0;
}

Με έξοδο:

 

 

Called by main().
Called by g().
Called by f().
Called by g().


Process exited normally.
Press any key to continue . . .
 

edit: Έκανα μια αλλαγή για να φανεί περισσότερο η χρήση της... :P

Επεξ/σία από bird
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πως μπορω να περασω εναν δισδυαστατο πινακα σε συναρτηση και να επεξεργαστω τα στοιχεια? Αν μπορει καποιος να μ πει την κληση και την δηλωση της συναρτησης.. ο πινακας ειναι Α[Ν][Ν].. Ειναι τετραγωνος πινακας και το μεγεθος το δινει στην main ο χρηστης... Ευχαρστω..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Ευχαριστώ @bird .... ωραιο το παράδειγμα σου αν και μετα ειδα οτι και εσυ άλλαξες σε const char* αντι σκέτου char* εδω μου παραπονέθηκε και μενα ο μεταγλωτιστης οτι δεν μπορει να κανει το conversion.

 

υ.γ Δεν έβγαζα με τιποτα την μετάφραση της αλλης χρησης του __func__ ωστε να καταλαβω τι θελει να πει.... ειχα υποψιαστει βεβαια οτι μπορεις να το χρησιμοποιησεις σαν ορισμα ωστε να δεις απο ποια συναρτηση καλειται μια αλλη .

 

 

 
#include <stdio.h>

void g(const char* func)
{    
    printf("g() Called by %s().\n",func);
    if(func == __func__) return;
    g(__func__);
    
    return;
}

void f(const char* func)
{
    printf("f() Called by %s().\n",func);
    g(__func__);
}

int main(void)
{
    g(__func__);
    f(__func__);  // Same with f(__FUNCTION__);
    
    return 0;
}
  

 

υ.γ2 __FUNCTION__ <=> __func__

Επεξ/σία από Star_Light
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Τον περνάς ως τρισδιάστατο. Δηλαδή, περνάς μία αναφορά στον πίνακα.

 

π.χ.

 

 

 

char** arr2d; /*........*/ void foo(char*** inputArr2d){/*....*/}

 

 

Αν δε θέλει ν'αλλάξει το πού δείχνει ο pointer arr2d δε χρειάζεται να περαστεί by-reference (σε 3πλο αστεράκι δηλαδή), τα στοιχεία του πίνακα ούτως ή άλλως by-reference περνούν αφού o arr2d και ο inputArr2d στην ίδια θέση μνήμης θα δείχνουν.

 

Διπλός pointer είναι αρκετός.

 

Επίσης, αν ο πίνακας δεν είναι δυναμικά δεσμευμένος ΔΕΝ γίνεται να τον περάσεις σε διπλό pointer (τουλάχιστον δεν ειναι standard). Ο μόνος τρόπος να τον περάσεις σε συνάρτηση είναι να υπάρχει στο όρισμα το μέγεθος της 2ης διάστασης του πίνακα.

 

π.χ

void processArray(int inputArray[][20], unsigned rows, unsigned columns) {}

int main() {   
    int array[10][20];   
    processArray(array, 10, 20);  

    return 0;
}
Επεξ/σία από Erevis
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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