Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: [c]ripetere immissione

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]ripetere immissione

    Ciao, sto scrivendo questo programma in cui si chiede di inizializzare un vettore di char.
    Durante il caricamento viene controllato se il carattere immesso è già presente nel vettore.
    In caso positivo fa ripetere la digitazione.

    Ecco una bozza di codice:
    codice:
    #include <stdio.h>
    #include <ctype.h>
    
    #define MAX_ELE 100
    
    main()
    {
     int i,n;
     char v[MAX_ELE];
     printf("\n// Il programma permette di caricare un vettore di caratteri\n// e se l'elemento digitato è gia presente nel vettore\n// verrà chiesto di digitarlo di nuovo.\n\n");
     do {
         printf("numero di elementi(massimo 100): ");
         scanf("%d",&n);
     } while(n<1 || n>MAX_ELE);
     printf("\n");
     fflush(stdin); 
     printf("CARICAMENTO DEL VETTORE\n")
     for(i=0;i<n;i++) {
         do {
         	 int j;
             printf("inserisci un carattere stampabile: ");
         	 scanf("%c",&v[i]);
             while(getc(stdin)!= '\n');
             for(j=0;j<i;j++)
                 if (v[i] == v[j])
                     printf("l'elemento è già presente, inserire nuovamente un carattere stampabile: ");
                           	 
         } while(isprint(v[i])==0);
     }
    }
    A me interessa che venga ripetuta la scanf e quindi il controllo, ma devo aver sbagliato qualcosa.

  2. #2
    codice:
         int repeat;
         do
         {
             repeat=0;
         	 int j;
             printf("inserisci un carattere stampabile: ");
         	 scanf("%c",&v[i]);
             while(getc(stdin)!= '\n');
             for(j=0;j<i;j++)
             {
                 if (v[i] == v[j])
                 {
                     printf("l'elemento è già presente, inserire nuovamente un carattere stampabile: ");
                     repeat=1;
                     break;
                 }
             }
         } while(repeat);
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Ho modificato il codice così:
    codice:
    #include <stdio.h>
    #include <ctype.h>
    
    #define MAX_ELE 100
    
    main()
    {
     int i,n;
     char v[MAX_ELE];
     printf("\n// Il programma permette di caricare un vettore di caratteri\n// e se l'elemento digitato è gia presente nel vettore\n// verrà chiesto di digitarlo di nuovo.\n\n");
     do {
         printf("numero di elementi(massimo 100): ");
         scanf("%d",&n);
     } while(n<1 || n>MAX_ELE);
     printf("\n");
     fflush(stdin); 
     printf("CARICAMENTO DEL VETTORE\n")
     for(i=0;i<n;i++) {
         short int repeat;
         do {
             repeat=0;
         	 int j;
             printf("inserisci un carattere stampabile: ");
         	 scanf("%c",&v[i]);
             while(getc(stdin)!= '\n');
             for(j=0;j<i && !repeat;j++)
                 if (v[i] == v[j]) {
                     printf("l'elemento è già presente, inserire nuovamente un carattere stampabile: ");
                     scanf("%c",&v[i]);
                     repeat=1;
                 }      	 
         } while(repeat || isprint(v[i])==0);
     }
    }
    può andar bene così?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cristianc
    Ho modificato il codice così:
    Perche' l'hai modificato?

    Quali parti hai cambiato?

    può andar bene così?
    A questa domanda devi rispondere tu ... fa quello che ti aspetti o no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    evidentemente il programma non funziona in almeno due punti:
    codice:
    // Il programma permette di caricare un vettore di caratteri
    // e se l'elemento digitato è gia presente nel vettore
    // verrà chiesto di digitarlo di nuovo.
    
    numero di elementi(massimo 100): 4
    
    CARICAMENTO DEL VETTORE
    inserisci un carattere stampabile: e
    inserisci un carattere stampabile: f
    inserisci un carattere stampabile: f
    l'elemento è già presente, inserire nuovamente un carattere stampabile: f
    inserisci un carattere stampabile: w 
    inserisci un carattere stampabile: x
    inserisci un carattere stampabile: c
    inserisci un carattere stampabile: s
    VVoVe:

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh, sicuramente con il for iniziale hai problemi ... io farei qualcosa del genere

    codice:
    	printf("CARICAMENTO DEL VETTORE\n");
    
    	i=0;
    	while(i<n)
    	{
    		int j;
    
    		printf("inserisci un carattere stampabile: ");
    		scanf("%c",&v[i]);
    		while(getc(stdin)!= '\n');
    
    		for(j=0; j<i; j++)
    		if (v[i] == v[j]) 
    		{
    			printf("l'elemento e' gia' presente\n");
    			i--;
    			break;		
    		}      	
    
    		i++;
    	}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    ho modificato così:
    codice:
    #include <stdio.h>
    #include <ctype.h>
    
    #define MAX_ELE 100
    
    main()
    {
     int i,n;
     char v[MAX_ELE];
     printf("\n// Il programma permette di caricare un vettore di caratteri\n// e se l'elemento digitato è gia presente nel vettore\n// verrà chiesto di digitarlo di nuovo.\n\n");
     do {
         printf("numero di elementi(massimo 100): ");
         scanf("%d",&n);
     } while(n<1 || n>MAX_ELE);
     printf("\n");
     fflush(stdin); 
     printf("CARICAMENTO DEL VETTORE\n");
     i=0;
     while(i<n) {
       do {  
       short int repeat;     
       repeat=0;
       int j;
       printf("Inserire un carattere stampabile: ");
       scanf("%c",&v[i]);
       while(getc(stdin)!= '\n');
       for(j=0;j<i && !repeat;j++)
           if (v[i] == v[j]) {
               printf("L'elemento è già presente. ");
               i--;
               repeat=1;
           }      	 
       } while(isprint(v[i])==0);
       i++;
     }
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cristianc
    ho modificato così:
    E quindi ?

    Perche' hai modificato il codice che ti ho mostrato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Originariamente inviato da oregon
    E quindi ?

    Perche' hai modificato il codice che ti ho mostrato?
    1)volevo evitare di utilizzare break, in quanto sconsigliato nel c
    2)con il vechio codice non si avrebbe avuto, oltre al messaggio che l'elemento è già presente, la richiesa di reimmissione nella stessa riga
    3)mancava il controllo sui caratteri stampabili

    Comunque, anche con l'apporto del codice che era stato postato, ottengo purtroppo questo:
    codice:
    // Il programma permette di caricare un vettore di caratteri
    // e se l'elemento digitato è gia presente nel vettore
    // verrà chiesto di digitarlo di nuovo.
    
    numero di elementi(massimo 100): 5
    
    CARICAMENTO DEL VETTORE
    Inserire un carattere stampabile: e
    Inserire un carattere stampabile: e
    Inserire un carattere stampabile: e
    L'elemento è già presente. Inserire un carattere stampabile:

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da cristianc
    1)volevo evitare di utilizzare break, in quanto sconsigliato nel c
    E chi lo sconsiglia? Non vedo problemi ad usare il break ...

    2)con il vechio codice non si avrebbe avuto, oltre al messaggio che l'elemento è già presente, la richiesa di reimmissione nella stessa riga
    Quale "vecchio codice"?

    3)mancava il controllo sui caratteri stampabili
    Lo potevi facilmente aggiungere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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