[RISOLTO] Banale problema menu scelta multipla

di il
6 risposte

[RISOLTO] Banale problema menu scelta multipla

Salve a tutti!
Avrei bisogno di un aiutino con un problema ababstanza banale. Io arrivo dalla programmazione python e, nel passaggio al C, trovo ostiche le definizione delle tipologie delle variabili e temo che sia proprio un'erronea definizione di queste a generare il mio attuale problema.
Sostanzialmente sto cercando di imparare come si impostino e utilizzino i socket in C.
Per farlo ho scritto un piccolo programma. La connessione funziona correttamente ma il problema è la creazione di un menu. Questo è il codice del menu:
char messaggio[80];

recv(remoteSocket, buffer, sizeof(buffer), 0);
printf("%s \n", buffer);
		
printf(">>> ");
gets(messaggio);
if (messaggio == "shellquit"){
        send(remoteSocket,messaggio,sizeof(messaggio),0);
	break;}
					
else if (messaggio == "shellhelp")
	printf("\nComandi:\n\tshellhelp = Mostra quetso help\n\tshellquit = Termina il programma e chiude la connessione\n");
				
else
	send(remoteSocket,messaggio,sizeof(messaggio),0);
Il problema è che anche inserendo uno dei comandi quali "shellquit" o "shellhelp", il programma continua la sua esecuzione senza eseguire la rispettiva procedura. In altre parole non mostra ne l'help ne chiude il ciclo.
Potreste spiegarmi cosa sbaglio ed eventualmente come correggerlo?

Grazie a tutti, resto in attesa

6 Risposte

  • Re: [RISOLTO] Banale problema menu scelta multipla

    Devi usare strcmp per far la comparazione tra stringhe.
  • Re: [RISOLTO] Banale problema menu scelta multipla

    Grazie del consiglio.
    Quindi qualcosa di questo genere?
        char messaggio[80];
    
        recv(remoteSocket, buffer, sizeof(buffer), 0);
        printf("%s \n", buffer);
              
        printf(">>> ");
        gets(messaggio);
        if (!strcmp(messaggio, "shellquit")){
                send(remoteSocket,messaggio,sizeof(messaggio),0);
           break;}
                       
        else if (!strcmp(messaggio, "shellhelp")){
           printf("\nComandi:\n\tshellhelp = Mostra quetso help\n\tshellquit = Termina il programma e chiude la connessione\n");
                    
        else
           send(remoteSocket,messaggio,sizeof(messaggio),0);
    E un'altra cosa: GCC mi dice che "gets" è deprecato. Cosa posso usare senza dover modificare altri punti del programma al posto di get?

    Grazie ancora
  • Re: [RISOLTO] Banale problema menu scelta multipla

    
    fgets(messaggio,80,stdin);
    
  • Re: [RISOLTO] Banale problema menu scelta multipla

    Ho provato fgets ma, mentre con gets strcmp faceva il suo dovere e il programam riconosceva i comandi, ora non li riconosce più. La cosa buffa è che il server remoto (il cui compito è eseguire i comandi che gli invio) riconosce i comandi del sistema (ad esempio "dir", "del", "whoami"...) ma il menu non funziona più e il risultato è "comando non riconosciuto".
    Ti posto il codice così magari capisci meglio qual è il problema:
    
    char messaggio[80];
    char buffer[10000];
    		while (1) 
    			{		
    				/* Il Client invia il messaggio al Server */
    				memset(&messaggio, 0, sizeof(messaggio));
    				memset(&buffer, 0, sizeof(buffer));
    				printf("\n>>> ");
    				fgets(messaggio,80,stdin);
    				if (!strcmp(messaggio, "shellquit"))
    					{
    						send(remoteSocket,messaggio,sizeof(messaggio),0);
    						break;
    					}
    					
    				else if (!strcmp(messaggio, "shellhelp"))
    					{
    						printf("Comandi:\n\tshellhelp = Mostra quetso help\n\tshellquit = Termina il programma e chiude la connessione\n");
    						send(remoteSocket,"whoami",sizeof(messaggio),0);
    						recv(remoteSocket, buffer, sizeof(buffer), 0);
    					}
    				else
    					{
    						send(remoteSocket,messaggio,sizeof(messaggio),0);
    						/* Il Client accetta il messaggio dal Server */
    						recv(remoteSocket, buffer, sizeof(buffer), 0);
    						printf("%s \n", buffer);
    					}
    			}
    
    Grazie dlela pazienza
  • Re: [RISOLTO] Banale problema menu scelta multipla

    Leggi le info di fgets
    A newline character makes fgets stop reading, but it is considered a valid character and therefore it is included in the string copied to str.
    quindi soluzione
    
    fgets(messaggio,80,stdin);
    const int length = strlen(messaggio);
    if(length && messaggio[length -1] ==  '\n')
           messaggio[length-1] = '\0';
    //adesso prosegui col resto
    
  • Re: [RISOLTO] Banale problema menu scelta multipla

    Grandissimo!
    Funziona perfettamente! Grazie ancora!
Devi accedere o registrarti per scrivere nel forum
6 risposte