Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Progetto C

  1. #1

    Progetto C

    Ciaoa tutti sto facendo un progetto per l'università che riguarda la costruzione di un interprete per comandi di manipolazioni bitmap. Essendo io un programmatore abbastanza basic ancora sul C, sto avendo dei problemi banali. Uno di questi riguarda il codice che vi posto qua sotto. Vi spiego brevemente come funziona: Il programma accetta in ingresso diversi comandi, identificati da una lettere e 1 o più parametri per la costruzione della bitmap, quella che vedete sotto è la prima funzione che devo costruire, ossia l'utente digita n nel case più 1 parametro n (ossia la dimensione di riga e colonna ) e poi costruisce la matrice salvandola. Siccome non voglio dilungarmi troppo per non perdermi, vi espongo il problema.
    Dallo switch funziona tutto, inserisco 'n' e il parametro e invio la stringa come parametro della funzione crea_b, quando arrivo alla funzione e provo a identificare il secondo elemento della stringa per andare a limitare i for, lui lo prende si dalla stringa ma ne costruisce una di tipo 52 elementi per riga e per colonna, praticamente la codifica in decimale di 4 (ossia ciò che ho inserito dopo 'n' ), se qualcuno di voi, senza uccidermi mi sa spiegare perchè gliene sarei molto grato.

    In anticipo un grazie a chiunque mi risponderà.

    void crea_b(char *n)
    {

    for (i = 0 ; i < n[1]; i++) {
    printf("\n");
    for (j = 0; j < n[1]; j++)
    printf("*");
    }

    int main(void)

    {

    do { // Controllo che sia stata inserita una lettera ed inserisco i parametri

    for (i = 0; i < 50 ; i++ ) {
    command[i] = getchar();
    if (command[i] == EOF)
    continue;
    else if (command[i] == 'p')
    break;
    }
    switch(command[0]) // Seleziono funzione
    {
    case 'n': crea_b(command); // chiamo la funzione
    break;

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non si è capito molto ma, nella funzione usi il valore

    n[1]

    come massimo per il for ...

    Sai cosa significa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    probabilmente no , adesso ci stavo pensando .... sulla funzione ho scritto

    int crea_b(char *string)
    {
    int n = string[1];

    if (n <= 23) {

    for (i = 0 ; i < n ; i++) {
    printf("\n");
    for (j = 0; j < n ; j++)
    printf("*");
    }
    }
    ma mi restituisce sempre la codifica in decimale di 4.

    Aiutami.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ripeto ... solo se ti rendi conto di quello che scrivi, riesci ad andare avanti.

    string[1]

    è un carattere. Il valore intero a cui arrivi non è altro che il codice ASCII del carattere in questione.

    Fai un esempio di quello che vuoi realizzare con questo "passaggio di parametri" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Allora io dal case nella stringa scrivo:


    n(Identifica la funzione)4(dimensione)

    passo la stringa nella funzione e poi il 4 lo devo impostare come limite nei for .... come faccio??

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Se passi tutta la stringa come parametro, allora devi "convertire" la parte che ti interessa da stinga ad intero. Per farlo, puoi usare la funzione

    atoi

    (ci cui ti invito a leggere la documentazione).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ciao, volevo innanzitutto ringraziarti per la tua risposta di prima, ho letto un po' la documentazione di atoi, ma non capisco se scrivo

    int n = atoi(string[1]);

    mi da un warning...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non hai letto bene ... atoi accetta un parametro "puntatore a char" ...

    Se il valore è fatto sempre da una sola cifra, allora puoi non usare la atoi e scrivere

    int n = stringa[1] & 0xf;

    altrimenti devi fornire un puntatore e quindi

    int n = atoi(stringa+1);

    Nel caso dell'atoi, la stringa deve essere terminata da zero binario (come per una qualsiasi stringa C).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    ho visto funziona, ma spiegami un secondo la prima soluzione, sai non sono quello che si prende la soluzine e ciao ciao voglio capire, perchè mi piace programmare, ma solo da un mesetto che lo faccio e sono ancora un incapace.

    Grazie ancora

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da guillermaz
    ho visto funziona,
    Quale delle due?

    ma spiegami un secondo la prima soluzione
    Se il valore numerico è di una sola "cifra", allora in quel modo prendi il valore ASCIII e azzeri i 4 bit più significativi; dato che i 4 bit meno significativi rappresentano il valore numerico corrispondente della cifra, ottieni quello che ti serve.

    Ad esempio, il carattere '4' ha codice ASCII

    0x34

    se azzeri i 4 bit più significativi ottieni 0x04 che è quello che ti serve.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.