Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558

    [C] Uscita da un ciclo con break

    Guardate questo codie:

    codice:
    #include <stdio.h>
    main ()
    {
    	char pass [128];
    	for (;;)
    		{
    			printf ("Inserisci la password per uscire:\n");
    			gets (pass);
    			if (pass=="ciao")
    				{
    					break;
    			        }
    	        }
        printf ("Complimenti!\n");
        char esci;
        scanf ("%c",&esci);
    }
    Dovrebbe ripetere all'infinito "Inserisci la password per uscire" tranne nel caso che la password sia "ciao". In quel caso dovrebbe uscire dal ciclo e continuare l'esecuzione del codice perr poi terminare...

    Solo che nn funzia!! Lo compila però anche inserendo "ciao" nn esce dal ciclo. Come mai?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    311
    il confronto fra stringhe non si può fare con l'operatore ==
    puoi usare strcmp(pass,"ciao")==0

  3. #3
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558
    Tnx, era quello il problema! Grazie

  4. #4
    codice:
    #include <stdio.h>
    #include <string.h> 
    main ()
    {
      char pass [128];
      char esci; 
      
      for ( ; ; )
      {
        printf ("Inserisci la password per uscire:\n");
        fgets (pass, sizeof(pass), stdin);
        if (strcmp(pass,"ciao\n") == 0) 
        /* oppure */
        if (strncmp(pass,"ciao",4) == 0) 
          break;
      }
    
      printf ("Complimenti!\n");
    
      /* getchar(); al posto di scanf */
      scanf ("%c",&esci);
    
    }
    1) per comparare le stringhe in c si usa la funzione strcmp()
    dichiarata in string.h,
    strncmp() compara i primi n caratteri

    2) la funzione gets() rende il tuo programma vulnerabile da exploit
    basati su buffer overrun, meglio usare fgets che ti permettere
    di dare un limite al numero di caratteri da registrare.

    3) in C89 non puoi dichiarare una variabile in mezzo al codice
    char esci;
    lo puoi dichiarare solo all'inizio di un blocco {},

    In c99 si può fare, ma questo standard è supportato solo con GCC
    quindi niente VC++ o Borland.
    In c++ si può fare da sempre.

    4) al posto di scanf("%c", &esci);
    puoi usare la più semplice getchar(); che restituisce anche
    il carattere letto nel caso ne avessi bisogno.

    CIao

  5. #5
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558
    Originariamente inviato da internet
    codice:
    #include <stdio.h>
    #include <string.h> 
    main ()
    {
      char pass [128];
      char esci; 
      
      for ( ; ; )
      {
        printf ("Inserisci la password per uscire:\n");
        fgets (pass, sizeof(pass), stdin);
        if (strcmp(pass,"ciao\n") == 0) 
        /* oppure */
        if (strncmp(pass,"ciao",4) == 0) 
          break;
      }
    
      printf ("Complimenti!\n");
    
      /* getchar(); al posto di scanf */
      scanf ("%c",&esci);
    
    }
    1) per comparare le stringhe in c si usa la funzione strcmp()
    dichiarata in string.h,
    strncmp() compara i primi n caratteri

    2) la funzione gets() rende il tuo programma vulnerabile da exploit
    basati su buffer overrun, meglio usare fgets che ti permettere
    di dare un limite al numero di caratteri da registrare.

    3) in C89 non puoi dichiarare una variabile in mezzo al codice
    char esci;
    lo puoi dichiarare solo all'inizio di un blocco {},

    In c99 si può fare, ma questo standard è supportato solo con GCC
    quindi niente VC++ o Borland.
    In c++ si può fare da sempre.

    4) al posto di scanf("%c", &esci);
    puoi usare la più semplice getchar(); che restituisce anche
    il carattere letto nel caso ne avessi bisogno.

    CIao
    1)Bho,adesso ho provato , e strcmp () mi va anche senza includere string.h...

    2)ok

    3)con il mio compilatore (LCC win32) funziona lo stesso

    4)si lo so, io solitamente usavo getch () che fa la medesima cosa, nn so perchè quì ho usato quel metodo

  6. #6
    In LCC win32 funziona, perchè aderisce allo standard C99.

    L'ansi C99 introduce delle novità rispetto all'ansi C89

    un mio post lo trovi qui
    http://forum.html.it/forum/showthrea...5&pagenumber=2

    alcuni link:
    http://en.wikipedia.org/wiki/C_programming_language#C99
    http://www.informit.com/isapi/guide~...de/content.asp

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