Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543

    [C] eseguire o uscire a seconda del dato inserito

    Buon giorno,
    forse non avrò specificato un titolo esaustivo, ma non mi veniva nulla di chiaro in mente.

    Ho ripreso, dopo anni, lo studio di C e ci sono alcune cose che ancora mi sfuggono o che ho dimenticato.
    Ho scritto un semplice programma che memorizza una stringa, la stampa a video e ne conteggia i caratteri.
    Tutto funziona.
    Ora però mi ero messo in testa di mettere una condizione "if" per far si che il conteggio caratteri venga eseguito solamente se viene immesso da tastiera il testo "si".
    Di seguito, il sorgente:
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    main()
    {
      typedef char string;
      string s[100];
      string scelta[2];
      int i, len=0;
    
      printf("Inserisci una parola: ");
      scanf("%s",s);    // memorizzo parola da input
      len=strlen(s);    // eseguo conteggio caratteri
      printf("Hai inserito: %s \n",s);
      
      
      printf("Vuoi effettuare il conteggio caratteri?");
      scanf("%s",scelta);
      if(scelta=='si')
      {
        printf("La parola '%s' contiene %d caratteri:\n",s,len);
      
        for(i=0; i<len; i++)
        printf(" s[%d] = %c\n",i,s[i]);
      }
      else
      printf("Arrivederci\n");
        
      
      system("pause");
    }
    Dov'è l'errore?
    "To iterate is human, to recurse, divine." (R.(Heller))

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Stai usando la classe

    string

    del C++, che NON esiste (naturalmente) in C.

    Stai facendo un po' di confusione con gli array di char del C che dovresti dichiarare con

    char scelta[3];

    perche' c'e' anche il terminatore oltre ai caratteri si

    Inoltre, in C, il confronto tra stringhe lo devi fare con la funzione strcmp e non con ==

    if(strcmp(scelta, "si")==0)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    In effetti faccio un po di confusione col C++ però ho definito, tramite typedef, il valore string.
    Grazie per la tua dritta.
    "To iterate is human, to recurse, divine." (R.(Heller))

  4. #4
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Allora, ho comparato le due stringhe come dicevi tue in effetti entra nel ciclo if.
    Il problema è che mi si perde la stringa s.

    Se metto questo codice:

    codice:
    main()
    {
      typedef char string;
      string s[100];
      string scelta[2];
      string si[]="si";
      int i, len=0;
    
      printf("Inserisci una parola: ");
      scanf("%s",s);    // memorizzo parola da input
      len=strlen(s);    // eseguo conteggio caratteri
      printf("Hai inserito: %s \n",s);
      
      
      /*printf("Vuoi effettuare il conteggio caratteri?");
      scanf("%s",&scelta);
      if(strcmp(si,scelta)==0)
      {*/
        printf("La parola '%s' contiene %d caratteri:\n",s,len);
      
        for(i=0; i<len; i++)
        printf(" s[%d] = %c\n",i,s[i]);
      /*}
      else
      printf("Arrivederci\n");*/
        
      
      system("pause");
    }
    Mi stampa questo:
    Inserisci una parola: pippo
    Hai inserito: pippo
    La parola 'pippo' contiene 5 caratteri:
    s[0] = p
    s[1] = i
    s[2] = p
    s[3] = p
    s[4] = o
    Premere un tasto per continuare . . .
    Se però metto il codice:
    codice:
    main()
    {
      typedef char string;
      string s[100];
      string scelta[2];
      string si[]="si";
      int i, len=0;
    
      printf("Inserisci una parola: ");
      scanf("%s",s);    // memorizzo parola da input
      len=strlen(s);    // eseguo conteggio caratteri
      printf("Hai inserito: %s \n",s);
      
      
      printf("Vuoi effettuare il conteggio caratteri?");
      scanf("%s",&scelta);
      if(strcmp(si,scelta)==0)
      {
        printf("La parola '%s' contiene %d caratteri:\n",s,len);
      
        for(i=0; i<len; i++)
        printf(" s[%d] = %c\n",i,s[i]);
      }
      else
      printf("Arrivederci\n");
      
      system("pause");
    }
    Ecco che mi si perde la parola che inserisco, quando la richiamo per la seconda volta: come mai?
    Inserisci una parola: pippo
    Hai inserito: pippo
    Vuoi effettuare il conteggio caratteri?si
    La parola '' contiene 5 caratteri:
    s[0] =
    s[1] = i
    s[2] = p
    s[3] = p
    s[4] = o
    Premere un tasto per continuare . . .
    Grazie per l'aiuto.
    "To iterate is human, to recurse, divine." (R.(Heller))

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da the-bit
    In effetti faccio un po di confusione col C++ però ho definito, tramite typedef, il valore string.
    Ho visto adesso ... ancora peggio ...

    Non usare quel typedef e usa tranquillamente il char senza fare confusione.

    Usa la strcmp come ti ho detto e utilizza 3 caratteri per il si ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Si appunto,
    ti ho risposto più su...
    "To iterate is human, to recurse, divine." (R.(Heller))

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