PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

di il
14 risposte

PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

#include<iostream>
#include<cstdlib>
#include<string.h>

struct SComandi{
char numero[7]="numero";
char nome[5]="nome";
char gruppo[7]="gruppo";
char impegni[8]="impegni";
char risposta1[3]="si";
char risposta2[3]="no";
char uscire[7]="uscire";
char inseriti[100];
};
typedef struct SComandi TComandi;



int main(){

TComandi utente;
int controllo;
printf("****BENVENUTO NELL'AGENDA 3000****");
printf("\n Cosa vuoi fare? Digita le seguenti parole :");
printf("\n Crea o cerca seguito dalle parole numero, un nome, un gruppo, un impegno");
printf("\n Oppure digita esci per uscire");
printf("\n");
gets(utente.inseriti);

if(controllo=strcmp(utente.inseriti,utente.numero))controllo=1;
if(controllo=strcmp(utente.inseriti,utente.nome))controllo=2;
if(controllo=strcmp(utente.inseriti,utente.gruppo))controllo=3;
if(controllo=strcmp(utente.inseriti,utente.impegni))controllo=4;
if(controllo=strcmp(utente.inseriti,utente.uscire))controllo=5;
else
printf("Comando non valido");

switch(controllo){

case 1:
printf("ok il prezzo è giusto");
break;
case 2:
printf("ok il prezzo è giusto");
break;
case 3:
printf("ok il prezzo è giusto");
break;
case 4:
printf("ok il prezzo è giusto");
break;
printf("ok il prezzo è giusto");
break;

}

}
sto facendo una prova di un programma volevo perchè non mi stampa "ok il prezzo è giusto?",

14 Risposte

  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Questo a mio avviso non ha senso
    struct SComandi{
    	char numero[7]="numero";
    	char nome[5]="nome";
    	char gruppo[7]="gruppo";
    	char impegni[8]="impegni";
    	char risposta1[3]="si";
    	char risposta2[3]="no";
    	char uscire[7]="uscire";
    	char inseriti[100]; 
    };
     typedef struct SComandi TComandi;
    Perché vorresti mettere delle costanti all'interno di una struttura, assieme al dato inserito?

    Poi questa non va bene
    gets(utente.inseriti);
    cerca nei numerosi thread che spiegano perché è meglio evitare la gets()

    Questo
    if(controllo=strcmp(utente.inseriti,utente.numero))controllo=1;
    	if(controllo=strcmp(utente.inseriti,utente.nome))controllo=2;
    	if(controllo=strcmp(utente.inseriti,utente.gruppo))controllo=3;
    	if(controllo=strcmp(utente.inseriti,utente.impegni))controllo=4;
    	if(controllo=strcmp(utente.inseriti,utente.uscire))controllo=5;
    	else
    	printf("Comando non valido");
    
    assegnare il risultato di strcmp a 'controllo' in questo caso non serve a niente.
    Al di là di questo, anche se hai digitato "numero" ti farà tutte le strcmp per darti alla fine "Comando non valido"... forse ti manca qualche else...

    Infine
    switch(controllo){
    
    	case 1:
    	printf("ok il prezzo è giusto");
    	break;
    	case 2:
    	printf("ok il prezzo è giusto");
    	break;
    	case 3:
    	printf("ok il prezzo è giusto");
    	break;
    	case 4:
    	printf("ok il prezzo è giusto");
    	break;
    	printf("ok il prezzo è giusto");
    	break;
    
    	}
    Le printf() le puoi fare direttamente all'interno di tutti quegli if che hai fatto prima, senza passare per la variabile 'controllo'.
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Il mio progetto è questo inserire all'interno di utente.inseriti una parola cerca e confrontarla con le altre stringhe inserite nel record SComandi se utente.inseriti è uguale a una delle stringhe va nel switch case al posto dei printf("ok il prezzo è giusto") ci saranno delle funzioni di inserimento di numeri eventi e gruppi di contatti riguardanti lavoro ecc..
    Il gets volevo utilizzarlo perchè volevo che confrontasse utente.inseriti più stringhe se in inseriti.utente ci fosse stato cerca+ un nome tra(nome,programmi,gruppi ecc..) avrebbe cercato altrimenti se c'era crea + un nome avrebbe creato, il gets mi serviva per lo spazio.
    Come posso fare?
    p.s.
    l'else me ne sono accorto e ho corretto
    p.s.
    in realtà il mio progetto iniziale era creare due stringhe con tutte le parole all'interno e confrontarle
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Data la confusione che si nota nella descrizione del problema ti consiglio di buttare giù in pseudocodice o flowchart il flusso del programma, prima di scrivere anche una sola riga di codice!
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Ci sono due cose che bisogna saper fare quando si chiede aiuto:
    1) utilizzare quel benedetto tag code
    2) parlare in ITALIANO comprensibile per spiegare il tuo problema.
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    AVETE PERFETTAMENTE RAGIONE non si capisce niente infatti volevo modificarlo per farvi capire solo che non ho avuto tempo per farlo.
    Premettendo che come potete ben capire sono un neofita nel linguaggio C il programma che volevo fare era il seguente:
    Lo scopo del programma era quello di creare un agenda simili a quelle dei telefonini con creazione di gruppi nomi e un agenda degli impegni.
    Come volevo farlo Volevo creare un menù che in base alle parole digitate nella gets(serve per inserire parole con lo spazio?Ma perchè se potete spiegare velocemente perchè non è consigliata usarla?) avrebbe svolto un determinato compito:
    -Se digitavi ad esempio CERCA NOME ti faceva una ricerca dei nomi presenti nella tua agenda.
    -Se digitavi ad esempio CREA IMPEGNO ti creava un impegno nell'agenda in un determinato giorno
    Per fare ciò io avevo pensato di creare per comodità di lettura un record, con le seguenti stringhe:
    -Cerca
    -Crea
    -Nome
    -Impegni
    -Gruppi
    -Numero
    -Risposta
    Ora La risposta presente nella gets veniva confrontata con tutte le altre stringhe e in base alle 8 combinazione di cerca o di crea con nome o impegni o gruppi o numero, richiama ciascuna combinazione una determinata funzione. Un idea troppo idiota? hahaha Scusatemi ma sto programmando da una settimana hahaha Se potete usare termini non troppo difficili o me li fate capire vi sarei molto grato.E' troppo difficile?
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    1) per la gets() ti ho detto di cercare tra i vari thread in cui se ne discute, comunque se vuoi continuare ad usare gets() va bene, fai attenzione però che non centra niente con gli spazi e se ti viene inserito "CERCA NOME" è proprio "CERCA NOME" che ti troverai nella stringa e non "CERCA" e poi "NOME"
    2) per accettare un comando del tipo "CERCA NOME" devi analizzare la stringa in input e dividerla in sottostringhe... se hai appena iniziato a programmare potrebbe essere moooolto difficile, quindi ti consiglio di semplificare per ora e predisponi magari un menu che ti fa scegliere l'operazione da fare "1. CERCA NOME", "2. CREA NOME", "3. CERCA NUMERO" ... e prendi in input solo un valore numerico.
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Comunque mi sono letto tutto il libro della mia università in una settimana e più o meno l'ho capito ho capito le funzioni, le memorie, i dati input e output, le librerie e i loro funzionamenti, il mio unico problema e che non mi sono mai esercitato ed eccone i risultati, ne ho seguito i corsi.
    Aaaaah ecco il perchè perfetto ma se io in teoria(SO CHE E' UN IDEA STRAMPALATA ED IMPOSSIBILE) al posto della gets() mettessi due scanf la prima scanf sarà sicuramente o cerca o crea la seconda una tra le altre 4 stringhe, a schermo le faccio apparire su di un unica riga, non esiste un comando per cambiare invio con spazio cosi da far sembrare che è un unico comando?
    Il menù a numeri lo so fare solo che mi sembra troppo facile sto facendo un programma difficile per riuscire a cementificare ciò che ho imparato in un solo esercizio.
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Ma che stai dicendo???!!!
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Se ho inteso ciò che vuoi fare, potresti fare semplicemente delle stringhe costanti, per esempio facendo così:
    #define CERCA "CERCA NOME"
    
    char input[100];
    gets(input);
    if (strcmp(input, CERCA) == 0)
      // istruzioni da fare se ha inserito CERCA NOME
    non so bene se con una define puoi anche definire una stringa: in caso il compilatore si arrabbi puoi anche fare
    char CERCA[15] = "CERCA NOME";
    tuttavia ci sono vari problemi logici:
    1) l'if che ti ho mostrato funzionerà SOLO se le due stringhe sono PERFETTAMENTE identiche, quindi se tu hai dichiarato come "keyword" la stringa "CERCA NOME", se l'utente ti inserisce "cerca nome", "cerca", "find name" o altro, la strcmp dirà che le due stringhe non sono uguali. ecco perchè, come giustamente detto, è preferibile usare un menù gestendo la scelta come un intero, che oltre a essere più facile da gestire è anche più comprensibile per l'utente.
    2) la gets è sconsigliata per il semplice fatto che se la tua stringa è di 20 caratteri massimo e lui ne inserisce 700, la gets ne leggerà comunque 700, sbattendo i primi 20 nell'array di char e i successivi 680 caratteri in altre aree di memoria, mandando l'array in overflow.

    se stai programmando da una settimana non venire a dire che vuoi fare le cose complicate.. anch'io quando ho iniziato a fare programmazione (l'anno scorso in 3° superiore) volevo creare un software stra-figo con 54456456456132 funzionalità, ma se prima non imparavo a fare la somma tra due numeri.....
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Mr.Black ha scritto:


    sto facendo un programma difficile per riuscire a cementificare ciò che ho imparato in un solo esercizio.
    Prova con la Torre di Hanoi , appena riuscirai a sviluppare il programma , e farlo funzionare , sarai pienamente soddisfatto. A me ha dato molta soddisfazione la prima volta.
    Ti consiglio se vuoi iniziare bene come ho fatto io , a comprarti questo libro http://www.ibs.it/code/9788838785719/deitel-harvey-m-deitel/c-fondamenti-di-programmazione.html
    , contiene dopo ogni capitolo degli esercizi per verificare se si è appreso bene il concetto. Risolvili tutti e avrai fatto passi da gigante nel giro di qualche settimana nogero
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Che significano questi errori?
    Allegati:
    18707_6fe27718ae45b31f0407ef40e2cceaeb.png
    18707_6fe27718ae45b31f0407ef40e2cceaeb.png
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    Non sono errori ma warning, e il significato dovrebbe essere abbastanza evidente: l'inizializzazione dei campi (cioè l'assegnazione di un valore) è possibile solo a partire dallo standard 2011, che però è abilitato di default.
  • Re: PROGRAMMA SEMPLICE C++ AIUTATEMI GRAZIE

    minomic ha scritto:


    Non sono errori ma warning, e il significato dovrebbe essere abbastanza evidente: l'inizializzazione dei campi (cioè l'assegnazione di un valore) è possibile solo a partire dallo standard 2011, che però è abilitato di default.
    Quando parli di standard che intendi?Cos'è che non posso fare e come posso eliminare il problema che ho detto prima?Ogni volta che ricompilo e apro il programma mi esce la risposta di quello precedente come faccio a eliminare questo problema?In teoria sarebbe un problema di memoria?Devo cancellare la memoria?
Devi accedere o registrarti per scrivere nel forum
14 risposte