Newsgroup: it.comp.lang.c
Titolo: ancora un problemino

scusate se abuso della Vs pazienza, ma non avete idea dell'aiuto che trovo
in questo ng, specialmente per uno che impara a programmare da zero con il
solo ausilio del libro, quindi se vi rompo parecchio ignoratemi pure ;)))
vengo al quesito: il problema mi chiede di prendere in input le variabili ,
calcolare il nuovo saldo e se e' maggiore del credito visualizzare
conto,creditio etc. Il problema per me e' il valore sentinella, non riesco a
capire come mai se inserisco "-1" a "conto" non termina immediatamente ma
chiede che venga immesso  -1 anche alle altre variabili esolo allora si
arresta. Bohhhhh?(Come vi sembra il codice?troppo pesante?)
come sempre Vi ringrazio anticipatamente
Giuseppe
vi posto il codice:
/*Calcolo del nuovo saldo*/
#include <stdio.h>
main()
{
 float
conto=0,saldoin=0,totarticoli=0,totcrediti=0,limcredito=0,nuovosaldo=0;
       printf("conto: ");
 scanf("%f", &conto);
  printf("saldoin: ");
 scanf("%f", &saldoin);
 printf("totarticoli: ");
 scanf("%f", &totarticoli);
 printf("totcrediti: ");
 scanf("%f", &totcrediti);
 printf("limitecredito: ");
 scanf("%f", &limcredito);
nuovosaldo=saldoin+totarticoli-totcrediti;
 if(nuovosaldo > limcredito)  {
 printf("conto: %f\n ", conto);
 printf("limitecredito: %f\n", limcredito);
 printf("nuovosaldo: %f\n", nuovosaldo);
 printf("Il limite del credito e' stato superato\n\n");
 }
 while(conto != -1){        /* valore sentinella = -1*/
 printf("conto: ");
 scanf("%f", &conto);
 printf("saldoin: ");
 scanf("%f", &saldoin);
 printf("totarticoli: ");
 scanf("%f", &totarticoli);
 printf("totcrediti: ");
 scanf("%f", &totcrediti);
 printf("limitecredito: ");
 scanf("%f", &limcredito);
       nuovosaldo=saldoin+totarticoli-totcrediti;
 if(nuovosaldo > limcredito)  {
 printf("conto: %f\n ", conto);
 printf("limitecredito: %f\n", limcredito);
 printf("nuovosaldo: %f\n", nuovosaldo);
 printf("Il limite del credito e' stato superato\n\n");
 }
 }
 system("PAUSE");
 return 0;
}

[cut...]
Il while verifica la condizione (conto != -1) solo una volta
all'inizio del blocco di istruzioni, e si ferma se la condizione non
viene rispettata, ma se la condizione è invece rispettata (vale a dire
che il valore precedente di "conto" era diverso da -1) procede invece
eseguendo TUTTE le istruzioni (le printf, le scanf, la verifica if
sopra citata ed eventualmente il suo blocco di istruzioni), e poi
verifica nuovamente.
Se tu quindi inserisci -1 al valore di conto, ciò non toglie che ti
verranno chiesti TUTTI i valori seguenti fino alla verifica successiva
del valore di "conto". Non è necessario mettere -1 a tutti gli altri
valori: puoi mettere quello che ti pare e comunque alla successiva
verifica uscirai dal while, a meno che il valore di "conto" non venga
cambiato prima della verifica.
Potresti usare un break, ma viene solitamente sconsigliato perché i
salti vanno se possibile evitati, perciò la soluzione più semplice ed
immediata mi sembra quella di mettere un if e di ripetere la verifica
della condizione del ciclo while.
Ecco come viene (eliminando anche l'inutile ripetizione iniziale)
/*Calcolo del nuovo saldo*/
#include <stdio.h>
main()
{
 float
conto=0,saldoin=0,totarticoli=0,totcrediti=0,limcredito=0,nuovosaldo=0;
while(conto != -1)
{
  printf("conto: ");
 scanf("%f", &conto);
  if(conto != -1)
  {
