Newsgroup: it.comp.lang.c
Titolo: Stupido programma

Salve
questo semplicissimo programmino didattico funziona, ma si comporta in 
maniera anomala:
#include "stdio.h"
#include "stdlib.h"
int main()
{
enum boolean {false, true};         // Definisce il tipo enumerativo 
boolean
short int contatore;                // Conta il numero di tentativi fatti 
dal giocatore
short int numero;                   // Numero da indovinare
short int tentativo;                // Tentativo fatto dall'utente
enum boolean indovinato=false;      // Flag booleano indicante se 
l'utente ha indovinato il numero
srand(time(NULL));                  // Inizializzazione del generatore 
dei numeri casuali
contatore=0;                        // Inizializzazione del numero di 
tentativi del giocatore
numero=rand()%100+1;                // Generazione casuale del numero da 
indovinare
do
{
printf("\n Inserire un numero compreso tra 1 e 100:==>");
scanf("%d",&tentativo);
contatore=contatore+1;//<--Il contatore viene incrementato solo una volta 
if (tentativo==numero) indovinato=true;
    else
        {
            if (tentativo<numero)
                printf("\nTroppo basso, riprova");
            else
            //if (tentativo>numero)
                printf("\nTroppo alto, riprova");
        }
printf("\n Contatore=%d",contatore);
}
while (indovinato==false);
printf("Hai indovinato il numero dopo %d tentativi",contatore);
return 0;
}
La variabile contatore viene incrementata una sola volta durante il ciclo 
di esecuzione del programma. Perchè ?
-- 
Register here: 
http://www.000webhost.com/92681.html
*** 1500 MB of disk space
*** 100 GB of data transfer
*** PHP and MySQL support with no restrictions
*** cPanel control panel
*** Website Builder

io ho provato così e mi pare faccia bene il suo dovere... ero sotto win 
e la definizione dell'enumerazione boolean contrastava con le costanti 
bool del c++.
Non so in che libreria sia time per visual studio per questo l'ho 
sostituito con una costante nell'rseed ma il resto dovrebbe andare uguale.
L'errore nel tuo codice potrebbe essere nella generazione del numero 
casuale, verifica. Per il resto funziona, contatore viene incrementato 
regolarmente.
#include "stdio.h"
#include "stdlib.h"
int main()
{
//enum boolean {false, true};         // Definisce il tipo enumerativo 
boolean
short int contatore;                // Conta il numero di tentativi 
fatti dal giocatore
short int numero;                   // Numero da indovinare
short int tentativo;                // Tentativo fatto dall'utente
bool indovinato=false;      // Flag booleano indicante se l'utente ha 
indovinato il numero
srand(555);                  // Inizializzazione del generatore dei 
numeri casuali
contatore=0;                        // Inizializzazione del numero di 
tentativi del giocatore
numero=rand()%100+1;                // Generazione casuale del numero da 
indovinare
do
{
	printf("\n Inserire un numero compreso tra 1 e 100:==>");
	scanf("%d",&tentativo);
	contatore=contatore+1;//<--Il contatore viene incrementato solo una volta
	if (tentativo==numero) indovinato=true;
		else{
             if (tentativo<numero)
                 printf("\nTroppo basso, riprova");
             else
             //if (tentativo>numero)
                 printf("\nTroppo alto, riprova");
         }
	printf("\n Contatore=%d",contatore);
}
while (indovinato==false);
printf("Hai indovinato il numero dopo %d tentativi",contatore);
return 0;
}
se mi posso permettere un consiglio, utilizza uno stile un pò migliore 
soprattutto per quel priomo if e l'indentazione generale; aiuta tanto a 
scovare gli errori!

 regolarmente.
Io ho scoperto che l'errore era la lettura della variabile short int. Il 
formato doveva essere
scanf("%hd",&tentativo) e non scanf("%d",&tentativo),
questo sotto Linux, in Windows non ho provato.
Francesco
