Newsgroup: it.comp.lang.c
Titolo: return con errore & getchar()

Sto facendo esercizio sulle funzioni e calcolo la potenza con una
funzione creata da me.
Ma qualcosa non va.
Non capisco cosa.
Il programma č sotto, e se ad esempio lo eseguo e inserisco 3 per
l'intero da elevare a potenza,
e 4 per la potenza, ottengo a video 43046721.
Per capire cosa succede ho inserito un printf ("%d - ",i2);
Questo va bene, quindi l'errore deve essere nel return alla funzione
main.
Ma dove?
Seconda cosa: se acquisisco i valori con i=getchar(); e i=getchar();
(non č la stessa cosa dello scanf ?)
non funziona bene. La variabile i me la prende, ma la seconda...
Ho lasciato le righe commentate, cosě magari č piů chiaro cosa
scrivevo.
Perchč questi errori con il getchar? Anche un altro programmino con il
getchar non mi funziona a dovere, sicuramente sto ignorando qualcosa.
Grazie a chiunque possa darmi una mano.
Nicola
#include <stdio.h>
long pot (int,int);
int main()
{
int i, p;
long ris;
printf("Eleva l'intero ");
//i=getchar();
scanf ("%d",&i);
printf("alla potenza ");
//p=getchar();
scanf ("%d",&p);
ris=pot(i,p);
printf("\nIl risultato: %d", ris);
}
long pot (int i2, int p2)
{
	int x;
	for (x=0; x<p2; x++)
		{
		printf ("%d - ",i2);
		i2=i2*i2;
		}
  return i2;
   }

 getchar non mi funziona a dovere, sicuramente sto ignorando qualcosa.
getchar prende UN SOLO carattere, non una sequenza formattata come scanf.
ciao.

 getchar non mi funziona a dovere, sicuramente sto ignorando qualcosa.
Il getchar() svuota il buffer di tastiera quindi se tu inserisci per 
esempio un tasto speciale come F1, F2 ecc.... ti verra' prima prelevato 
il carattere 0 o 0XE0 ora non ho presente e poi dovrai inserire un altro 
getchar() per prendere il secondo carattere.
Per esempio:
c=getch();
printf("%c",c);
if((c==0)||(c==0XE0)) c=getch();
printf("%c",c);
Se in questo programma inserisci "F1" vedrai prima uno 0 ( sul primo 
printf ) e poi un ";" sul secondo.
Questo e' quanto so... potrei anche essere smentito.

  
Cioè?
il ciclo dice: finche p2-1 è vero (e lo cala di uno, ogni volta che
rifa il while..se va a 0, quindi darà un numero negativo, quindi la
conizione white sarà falsa, giusto?), allora i2 moltiplicalo per cosa
? presumo voglia dire di moltiplicarlo per se stesso. Poi uguaglialo a
p . Dunque se i2 fosse 3, e p2 anche lui 3, allora sarebbe:
3*3=p (cioè 3)
qui non mi torna.
Puoi spiegarmi i passaggi di questo while, per favore?

 Cioč?
Cioč:
p viene inizializzato a i2 (base).
p2 č l'esponente.
Il ciclo viene ripetuto nel momento in cui p2-1 č vero (cioč diverso da 
zero). Questo perchč se devi eseguire 5^2 devi iniziare con 5 e 
moltiplicarlo per 5 solo una volta, non due, altrimenti otterresti 5*5*5.
Quindi abbiamo stabilito che p2 viene immediatamente decrementato e poi 
si esegue un controllo su di esso.
NEL ciclo poi i2 viene moltiplicato per p (base).
L'istruzione i2 *= p significa i2=i2*p;
Al contrario di come facevi tu all'inizio, che moltiplicavi sempre la 
base per il prodotto ottenuto:
base=base*base
che č errato.
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|