Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Comandi stringa

  1. #1

    Comandi stringa

    Buonasera, ho iniziato la programmazione da pochissimo e mi sono trovato davanti ad un problema.
    Sto creando un programma che mi aiuti nella risoluzioni di alcuni calcoli noiosi di matematica (determinante di una 4*4, binomio di newton, area del cerchio data l'equazione analitica...)

    Ora appunto ho già scritto il codice di queste tre parti, non fosse che devo trovare il modo di fargli eseguire solo quella che voglio.

    L'idea era quella di inserire un comando es. "cerchio" e faccia un salto alla porzione di codice corretta, poi ritorni ala situazione di partenza.
    L'idea era con il goto (visto che il codice è "porzionato"), tuttavia mi rimane la questione di come fargli capire i comandi.

    Avevo provato a creare una variabile
    codice:
    char * Comando;
    scanf ("%s", &Comando);
    if (Comando=="cerchio") goto ...
    che
    1) Non funziona
    2) Utilizza il goto.

    Qualcuno mi può dare una mano?
    Grazie!

  2. #2
    1. Quella coppia char * - scanf è sbagliata; alla scanf devi dare un buffer in cui copiare i caratteri acquisiti da tastiera, mentre le stai dando un puntatore non inizializzato (anzi, con quella & le stai dando un puntatore ad un puntatore non inizializzato). Ad un puntatore in sé non è associato alcuno spazio di memoria (oltre a quello per memorizzare dove punta): nel tuo codice dove può memorizzare i caratteri la scanf?
    Usa al posto di quel puntatore un array di dimensioni sufficientemente grandi (diciamo 100 caratteri), in cui la scanf potrà scrivere, e usa, invece di "%s", "%<numero>s", dove al posto di <numero> metterai le dimensioni del buffer meno uno, in modo da evitare rischi di buffer overflow. In alternativa puoi usare la fgets che è anche più semplice.
    2. Le stringhe non si confrontano con ==, dato che == fa un confronto tra gli indirizzi puntati dai due puntatori. Usa la funzione strcmp.
    3. Non usare la goto; piuttosto, metti ciascuna delle tue operazioni in una funzione separata, e dall'if richiama la funzione corrispondente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460

    Re: Comandi stringa

    Originariamente inviato da notexpert
    Buonasera, ho iniziato la programmazione da pochissimo e mi sono trovato davanti ad un problema.
    Sto creando un programma che mi aiuti nella risoluzioni di alcuni calcoli noiosi di matematica (determinante di una 4*4, binomio di newton, area del cerchio data l'equazione analitica...)

    Ora appunto ho già scritto il codice di queste tre parti, non fosse che devo trovare il modo di fargli eseguire solo quella che voglio.

    L'idea era quella di inserire un comando es. "cerchio" e faccia un salto alla porzione di codice corretta, poi ritorni ala situazione di partenza.
    L'idea era con il goto (visto che il codice è "porzionato"), tuttavia mi rimane la questione di come fargli capire i comandi.

    Avevo provato a creare una variabile
    codice:
    char * Comando;
    scanf ("%s", &Comando);
    if (Comando=="cerchio") goto ...
    che
    1) Non funziona
    2) Utilizza il goto.

    Qualcuno mi può dare una mano?
    Grazie!
    codice:
    char * Comando;
    scanf ("%s", &Comando);
    if (Comando=="cerchio") goto ...
    RIGA 1) dichiari un puntatore a char di nome Comando

    RIGA 2) assegni un input di tipo stringa ad un puntatore che contiene come indirizzo la locazione del tuo puntatore, in pratica non stai modificando il valore puntato da Comando ma stai tentando di variare il suo indirizzo, l'indirizzo proprio di una variabile puntatore e non l'indirizzo della variabile puntata

    se vuoi memorizzare il contenuto dato in input come stringa devi togliere quella & dal secondo argomento passato a scanf.

    EDIT:
    per quanto riguarda la struttura di selezione ti consiglio un if multi-ramo o else-if

    ricorda che in C il nome di una variabile puntatore è sinonimo di indirizzo

  4. #4

    Re: Re: Comandi stringa

    Originariamente inviato da Freax
    se vuoi memorizzare il contenuto dato in input come stringa devi togliere quella & dal secondo argomento passato a scanf.
    Fosse quello l'unico problema del suo codice...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464

    Moderazione

    Originariamente inviato da notexpert
    Buonasera, ho iniziato la programmazione da pochissimo e mi sono trovato davanti ad un problema.
    Qualcuno mi può dare una mano?
    Grazie!
    Tralasciando il problema in quanto tale, è l'ennesima volta che apri una discussione senza specificare il linguaggio nel titolo, come richiesto dal Regolamento e come ti è stato più volte segnalato da moderatori e utenti.

    Pertanto, chiudo questa discussione e ti invito nuovamente a leggere e rispettare scrupolosamente il Regolamento di quest'area, pena la chiusura senza preavviso delle discussioni (chiaramente, non all'infinito...).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.