PDA

Visualizza la versione completa : Comandi stringa


notexpert
01-08-2011, 00:57
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

char * Comando;
scanf ("%s", &Comando);
if (Comando=="cerchio") goto ...

che
1) Non funziona :dh:
2) Utilizza il goto. :dh:

Qualcuno mi pu dare una mano?
Grazie!

MItaly
01-08-2011, 01:05
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.

Freax
01-08-2011, 01:05
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

char * Comando;
scanf ("%s", &Comando);
if (Comando=="cerchio") goto ...

che
1) Non funziona :dh:
2) Utilizza il goto. :dh:

Qualcuno mi pu dare una mano?
Grazie!



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

MItaly
01-08-2011, 01:10
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... :D

alka
01-08-2011, 09:55
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 (http://forum.html.it/forum/showthread.php?s=&threadid=973887) 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 (http://forum.html.it/forum/showthread.php?s=&threadid=973887) di quest'area, pena la chiusura senza preavviso delle discussioni (chiaramente, non all'infinito...).

Loading