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

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

Δημοσ.

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

 

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
Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

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