Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

C - funzione per incrementare di uno un intero qualsiasi

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentehuyol » 18 set 2016, 12:43

ciao a tutti,
ho buttato giù questo programmino che dovrebbe incrementare di una unità il numero degli anni di età digitato dall'utente.
Non riesco a capire dove possa essere l'errore.....grazie a chi vorrà aiutarmi... O_/
Codice: Seleziona tutto
//PROGRAMMA PER CONOSCERE L'ETA'

#include<stdio.h>
main()

{
int età, proxetà;
proxetà=età++;
printf ("Quanti anni hai?: ");
scanf ("%d\n", &età);
printf ("Quindi vuol dire che l'anno prossimo avrai %d anni", proxetà);
}
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

5
voti

[2] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentebanjoman » 18 set 2016, 12:52

Codice: Seleziona tutto
//PROGRAMMA PER CONOSCERE L'ETA'

#include<stdio.h>
main()

{
   int eta, proxeta;

   printf ("Quanti anni hai?: ");
   scanf ("%d\n", &eta);

   proxetà = ++eta;

   printf ("Quindi vuol dire che l'anno prossimo avrai %d anni", proxeta);
}



L'assegnamento
Codice: Seleziona tutto
   proxetà = ++eta;

devi metterlo dopo aver letto la variabile eta con scanf().
Inoltre l'assegnamento ha una falla. L'istruzione:
Codice: Seleziona tutto
   proxeta = eta++;

Assegna il valore di eta a proxeta e poi incrementa di uno il valore di eta.
Invece
Codice: Seleziona tutto
   proxeta = ++eta;

prima incrementa di uno il valore di eta, e poi assegna il valore di eta a proxeta.

Suggerimento: non usre le lettere accentate o altri caratteri strani nei sorgenti dei programmi: il compilatore potrebbe non gradirli. Usa solo il set ASCII standard.
O_/
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1622
Iscritto il: 19 set 2013, 19:27

0
voti

[3] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentehuyol » 18 set 2016, 12:58

...grazie mille!!!! :ok: O_/
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[4] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentehuyol » 18 set 2016, 13:04

....non capisco...

Codice: Seleziona tutto
franco@HP-15-Notebook-PC:~/Scrivania$ gcc ETA.c -o eta
franco@HP-15-Notebook-PC:~/Scrivania$ ./eta
Quanti anni hai?: 56


Codice: Seleziona tutto
#include<stdio.h>
main()

{
int eta, proxeta;
printf ("Quanti anni hai?: ");
scanf ("%d\n", &eta);
proxeta=++eta;
printf ("Quindi vuol dire che l'anno prossimo avrai %d anni", proxeta);
}
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[5] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentebanjoman » 18 set 2016, 13:07

Nemmeno io. Cosa e' che non va? Cosa stampa il programma?
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1622
Iscritto il: 19 set 2013, 19:27

0
voti

[6] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentehuyol » 18 set 2016, 13:11

stampa solo:

quanti anni hai: 56

...non mi stampa in successione:

allora vuol dire che l'anno prossimo avrai 57 anni
Avatar utente
Foto Utentehuyol
120 2 5
Frequentatore
Frequentatore
 
Messaggi: 203
Iscritto il: 30 gen 2011, 19:24

0
voti

[7] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentebanjoman » 18 set 2016, 13:26

Eh, devi fare due piccole correzioni :-) nella riga

Codice: Seleziona tutto
scanf ("%d\n", &eta);


togli il "\n"
Aggiungilo invece in
Codice: Seleziona tutto
printf ("Quindi vuol dire che l'anno prossimo avrai %d anni\n", proxeta);


Sono "sottigliezze della scanf(). In linea di principio non usare mai il "\n" in una scanf().
Se vuoi usare il %d, la scanf() si aspetta di leggere una sequenza di caratteri ascii e li converte in un numero. Il \n dice che hai terminato l'input.
Nel caso attuale con %d\n la scanf() interpreta il "\n" come un carattere da leggere, lo scarta e si pone in attesa di un nuovo carattere. Per forzare il terminale e dire alla scanf() che hai finito di inserire il numero devi allora premere la combinazione di tasti Ctrl+D, che significa EOF (end-of-file). Altrimenti la scanf() poverina non sa quando hai finito di digitare davvero.

Eliminando il "\n" dalla scanf() tutto riprende a funzionare regolarmente.
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
12,2k 5 11 12
G.Master EY
G.Master EY
 
Messaggi: 1622
Iscritto il: 19 set 2013, 19:27

0
voti

[8] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentealev » 18 set 2016, 13:49

Piccolo suggerimento generico per Foto Utentehuyol: non mettere nel codice funzioni/operatori/modificatori/ecc senza averne sperimentato in pratica gli effetti, eviterai così molti contrattempi come quello descritto da Banjoman; pur con i suoi difetti (e quale linguaggio non ne ha) il C è ultra-documentato, quindi trovi sempre quello che ti serve
Avatar utente
Foto Utentealev
5.993 2 9 12
free expert
 
Messaggi: 6281
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

1
voti

[9] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto Utentecarloc » 18 set 2016, 14:05

E poi...
Codice: Seleziona tutto
#include<stdio.h>
main()

{
int eta;
printf ("Quanti anni hai?: ");
scanf ("%d", &eta);

printf ("Quindi vuol dire che l'anno prossimo avrai %d anni\n", ++eta);
}


La variabile ausiliaria proxeta non serve :D

E non escludo che qualcuno (anche più di uno) qua intorno sia in grado di far tutto in una singola linea :mrgreen:
Se ti serve il valore di beta: hai sbagliato il progetto!
Avatar utente
Foto Utentecarloc
33,8k 6 11 13
G.Master EY
G.Master EY
 
Messaggi: 2153
Iscritto il: 7 set 2010, 19:23

3
voti

[10] Re: C - funzione per incrementare di uno un intero qualsiasi

Messaggioda Foto UtentePietroBaima » 18 set 2016, 14:51

Codice: Seleziona tutto
#include<stdio.h>
void main(void)

{unsigned int eta=0; for(printf ("Quanti anni hai?:");!eta;scanf ("%d", &eta),printf ("\nQuindi vuol dire che l'anno prossimo avrai %d anni\n",++eta));}


:mrgreen:
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti