[C] Acquisizione char da tastiera

di il
21 risposte

[C] Acquisizione char da tastiera

Ciao a tutti, come mai non riesco ad acquisire Char da tastiera per fare una semplice domanda al utente del tipo Y o N? Mi date un occhiata a questo codice? Grazie a tutti

#include<stdio.h>
int main(){
int vet[100];
int temp;
int i=0;
int n;
char risposta;

do{
printf("inserisci un numero\n");
scanf("%d",&vet);
printf("vuoi inserire un altro valore?(Y/N)\n");
scanf("%d",&risposta);
n=n+1;
i++;
}
while(risposta=='Y');
}

21 Risposte

  • Re: [C] Acquisizione char da tastiera

    Ti semplicemente segnalo che tentando di compilare il tuo codice, ottengo il seguente avviso:

    " warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat=]
    scanf("%d",&risposta);
    "
  • Re: [C] Acquisizione char da tastiera

    Devi inserire "%c" per un carattere oppure "%s" intesa come stringa!!
  • Re: [C] Acquisizione char da tastiera

    vuott ha scritto:


    Ti semplicemente segnalo che tentando di compilare il tuo codice, ottengo il seguente avviso:

    " warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat=]
    scanf("%d",&risposta);
    "
    Ragazzi scusate rispondo ad entrambi in maniera uguale. Quello è un refuso di un copia e incolla poiché per risolvere il problema avevo fatto una versione dove avevo sostituito i char con gli int in modo che invece di aspettarsi un Y o un N si aspettava un 1 o uno 0. Me ne sarei accorto se dava errore il compilatore quello che mi fa invece il programma (con c al posto di d) è che mi printeffa (scusate il termine) la domanda se voglio aggiungere un altro numero, ma non accetta risposte non uscendomi più dal programma (penso a causa del while). Potete ricontrollare? Grazie mille
  • Re: [C] Acquisizione char da tastiera

    AmedeoF ha scritto:


    Devi inserire "%c" per un carattere oppure "%s" intesa come stringa!!
    Ragazzi scusate rispondo ad entrambi in maniera uguale. Quello è un refuso di un copia e incolla poiché per risolvere il problema avevo fatto una versione dove avevo sostituito i char con gli int in modo che invece di aspettarsi un Y o un N si aspettava un 1 o uno 0. Me ne sarei accorto se dava errore il compilatore quello che mi fa invece il programma (con c al posto di d) è che mi printeffa (scusate il termine) la domanda se voglio aggiungere un altro numero, ma non accetta risposte non uscendomi più dal programma (penso a causa del while). Potete ricontrollare? Grazie mille
  • Re: [C] Acquisizione char da tastiera

    Il problema non è il while ma la scanf, ti consiglio di eseguire il debug perché può farti capire molte cose.
  • Re: [C] Acquisizione char da tastiera

    Tonmu ha scritto:


    Il problema non è il while ma la scanf, ti consiglio di eseguire il debug perché può farti capire molte cose.
    Grazie ma potresti dirmi qualcosa di più perché non posso lavorare sempre ad il computer con il quale programmo..
  • Re: [C] Acquisizione char da tastiera

    Dopo aver inserito il numero nel vettore rimane il carattere di new line nel buffer (cioè "\n") quindi la scanf del char prende \n. Per risolvere il problema devi modificare la scanf così: scanf(" %c",&risposta); ovvero uno spazio prima del %c, così facendo la scanf ignora i caratteri blank.
  • Re: [C] Acquisizione char da tastiera

    Zio_petrullone ha scritto:


    perché non posso lavorare sempre ad il computer con il quale programmo..
    Che vuoi dire?
  • Re: [C] Acquisizione char da tastiera

    Tonmu ha scritto:


    Dopo aver inserito il numero nel vettore rimane il carattere di new line nel buffer (cioè "\n") quindi la scanf del char prende \n. Per risolvere il problema devi modificare la scanf così: scanf(" %c",&risposta); ovvero uno spazio prima del %c, così facendo la scanf ignora i caratteri blank.
    Grazie mille ora funziona
  • Re: [C] Acquisizione char da tastiera

    Ho letto la discussione. Seguendo le istruzioni date, il risultato non mi è piaciuto.
    Ho modificato il codice in questo modo:
    
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main()
    {
    int vet[10];
    int temp;
    int i=0;
    int n=0;
    char risposta;
    
    	printf("vuoi inserire un numero ? (y/n)\n");
    	scanf(" %c",&risposta);
    	if(risposta=='y')
    	{
    		printf("quanti numeri vuoi inserire ? ");
    		scanf("%d",&n);
    		while(risposta == 'y' && vet[i] < vet[n])
    		{
    			for(i=0; i<n; i++)
    			{
    				printf("inserisci un numero:  \n");
    				scanf("%d",&vet[n]);
    			}
    		}
    	}
    	else
    		return 0;
    }
    
    Funziona bene.
    Saluti.
  • Re: [C] Acquisizione char da tastiera

    Funziona bene.
    L'hai provato e funziona ???
    Tralasciando il fatto che testi solo la 'y' e non la 'Y' (peccato veniale ) potresti spiegare cosa fa il test qui sotto?
    while (risposta == 'y' && vet[i] < vet[n])
    visto che 'risposta' non può cambiare all'interno del ciclo e che vet[] non è ancora stato caricato (ma al di là di queste considerazioni, davvero non si capisce il test che fai).
    Infine: hai ridotto la dimensione di vet[] da 100 (come era nel posto originale) a 10: perchè? Perchè invece non hai inserito un controllo sull'input di n (ovvero che sia 0<n<=10)?
    Dimenticavo... qui sotto c'è un errore bello grosso (vet[n] anzichè vet)
    			for (i = 0; i<n; i++)
    			{
    				printf("inserisci un numero:  \n");
    				scanf("%d", &vet[n]);
    			}
    
  • Re: [C] Acquisizione char da tastiera

    candaluar ha scritto:


    Funziona bene.
    L'hai provato e funziona ???
    Tralasciando il fatto che testi solo la 'y' e non la 'Y' (peccato veniale ) potresti spiegare cosa fa il test qui sotto?
    while (risposta == 'y' && vet[i] < vet[n])
    visto che 'risposta' non può cambiare all'interno del ciclo e che vet[] non è ancora stato caricato (ma al di là di queste considerazioni, davvero non si capisce il test che fai).
    Infine: hai ridotto la dimensione di vet[] da 100 (come era nel posto originale) a 10: perchè? Perchè invece non hai inserito un controllo sull'input di n (ovvero che sia 0<n<=10)?
    Dimenticavo... qui sotto c'è un errore bello grosso (vet[n] anzichè vet)
    			for (i = 0; i<n; i++)
    			{
    				printf("inserisci un numero:  \n");
    				scanf("%d", &vet[n]);
    			}
    
    Ho snellito il mio codice togliendo il while, ed aggiustando lo scanf.
    Comunque, l'utente che ha aperto la discussione, chiedeva qualcosa di diverso. Infatti aveva usato il do...while.
    Ora ci studio un pò, e poi posto il codice completo, che tenga conto di un primo inserimento di un numero e poi la domanda se si vuole aggiungere altri numeri.
  • Re: [C] Acquisizione char da tastiera

    Comunque, l'utente che ha aperto la discussione, chiedeva qualcosa di diverso. Infatti aveva usato il do...while.
    In realtà Zio_petrullone aveva anche chiuso la discussione, mi sembra; credo che non ci sia niente di sbagliato ad aggiungere delle precisazioni, come credo volessi fare tu , ma confondere le idee proponendo come soluzione alternativa del codice che non funziona non mi sembra per niente una buona idea. Se devi postare del codice almeno provalo
  • Re: [C] Acquisizione char da tastiera

    candaluar ha scritto:


    Comunque, l'utente che ha aperto la discussione, chiedeva qualcosa di diverso. Infatti aveva usato il do...while.
    In realtà Zio_petrullone aveva anche chiuso la discussione, mi sembra; credo che non ci sia niente di sbagliato ad aggiungere delle precisazioni, come credo volessi fare tu , ma confondere le idee proponendo come soluzione alternativa del codice che non funziona non mi sembra per niente una buona idea. Se devi postare del codice almeno provalo
    Da quello che ho capito dell'idea dell'utente starter, ho riveduto e corretto il mio codice.
    Oltre il codice c'è anche il commento.
    
    // DICHIARO LE LIBRERIE
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main()
    {
    // DICHIARO ED INIZIALIZZO LE VARIABILI
    int vet[100];
    int i=0;
    int n=0;
    char risposta;
    	// SI INSERISCE IL PRIMO NUMERO
    	printf("inserisci un numero\n");
    	scanf("%d",&vet[i]);
    	// SI CHIEDE ALL'UTENTE SE VUOLE INSERIRE ALTRI VALORI
    	printf("vuoi inserire altri valori ? (y/n)\n");
    	scanf(" %c",&risposta);
    	// CON if, SE LA RISPOSTA E' y SI PROSEGUE CON IL PROGRAMMA
    	if(risposta == 'y')
    	{	// SI CHIEDE QUANTI NUMERI SI VOGLIONO INSERIRE
    		printf("quanti numeri vuoi inserire ?  ");
    		scanf("%d", &n);
    			// CON IL CICLO FOR SI INSERISCONO NEL vet[i] I NUMERI VOLUTI
    			for(i=0; i<n; i++)
    			{
    				printf("inserisci un numero \n");
    				scanf("%d",&vet[i]);
    			}
    	}
    	else
    	{return 0;}	// ALTRIMENTI SI ESCE DAL PROGRAMMA
    }
    
Devi accedere o registrarti per scrivere nel forum
21 risposte