Newsgroup: it.comp.lang.c++
Titolo: problemi con i cicli!

salve...ho da poco cominciato lo studio del c++ all'università...
provavo a fare un programma stupidissimo...
se si inserisce un numero il prog ti dice "hai inserito xx"
se si inserisce una lettera il prog ti dice "non puoi inserire una lettera" 
e torna indietro,,,ora il problema è che quando torna indietro non mi fa 
riinserire il numero...salta il "cin>>a"
mi potete aiutare...questo è il prog
grazie
#include <iostream.h>
#include <conio.h>
void main ()
{
int a;
do {
cout<<"\ninserisci a ";
cin>>a;
if (a==0)
cout<<"\nnon puoi inserire una lettera";
}
while (a==0);
cout<<"\nhai messo ";
cout<<a;
cout<<"\npremere un tasto per continuare";
getch ();
}
______________________________________________________
Get Your Private, Free Email at 
http://www.hotmail.com
--
Posted from [192.28.65.19] by way of 
law-f128.hotmail.com
 [209.185.131.191]
via Mailgate.ORG Server - 
http://www.mailgate.org

 while (a==0);
while (a!=0);
Inoltre non credo che faccia esattamente ciň che volevi ottenere.
Rivedine la logica con attenzione.
EMG

Stai scherzando, spero.
Non credo che scherzasse. Altrimenti ci sono cascato anch'io.
AB
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Andrea Baruzzo
Via Circonvallazione, 26
Muzzana del Turgnano (UD) - Italy
e-mail: 
andrea....@ud.nettuno.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

for(;;)
Forse non lo sai, ma il for nella sua accezione piu` generale e`
derivato direttamente dal while, nel C++ e` stato reso piu` generale
per cui e` sostituibile al while... ma da questo non vuol certo
dire che usare l'uno o l'altro non comporti differenze. Anzi il tuo
e` un tipico abuso...
Il do-while ha poi una semantica molto diversa dal while in quanto
il corpo dell'istruzione viene eseguita sempre almeno una volta
(la guardia viene controllata solo alla fine e non prima come
avviene nel for e nel while).
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

( while, repeat do ).
Non e` necessariamente la stessa cosa, un compilatore lavora in modo
meccanico e l'uso di un costrutto al posto di un altro non produce
necessariamente lo stesso codice. Non e` quindi solo una questione di
estetica o di manutenibilita`.


per cui e` sostituibile al while...
Che significa  " e' stato reso piu' generale?"
Non capisco.

Non capisco.
In molti linguaggi il for ha una struttura molto piu`
rigida del tipo
for(int i=a; i<b; ++i)
La variabile i ha cioe` necessariamente tipo intero, alla fine di
ogni iterazione viene incrementata di 1 ed il ciclo si arresta
al raggiungimento di un certo valore soglia.
Un linguaggio di questo tipo e` il pascal ove esiste anche il vincolo
di non poter modificare la guardia all'interno del corpo del ciclo
+ altre piccole variazioni semantiche.
Il C++ (e presumo anche il C) adotta invece un approccio diverso
tale da rendere for e while praticamente sostituibili
in ogni contesto. Un esempio di generalita` del for in C/C++
e` ad esempio:
for(TCell* Current = List.First; Current!=0; Current = Current->Next)
In pascal non potresti farlo, bisogna ricorrere necessariamente
ad un while.
In questo senso si inserisce la mia precedente affermazione.


per cui e` sostituibile al while... ma da questo non vuol certo
In realta' tutto questo e' sempre stato vero anche in C.



Non ho capito se mi sono spiegato o meno...
ci riprovo...
Il for di per se non e` necessario in nessun linguaggio che fornisca
anche il while.
In molti linguaggi il for come gia` detto altro non e` che un 
particolare schema di iterazione in cui si esegue un numero di
iterazioni prefissato. Il while invece esegue in generale un numero di
iterazioni non determinabile ad occhio (la guardia non deve cioe`
necessariamente essere del tipo "a<b" dove "a" viene incrementata
ad ogni iterazione).
Nel C/C++ la guardia del for non deve avere necessariamente la struttura
a<b ma va bene una qualsiasi espressione booleana;
In effetti 
for(<init>;<cond>;<iter>) <statement>
sappiamo essere equivalente a
<init>
while(cond) {
  <statement>
  <iter>
}
in pascal la struttura del for e` invece
for i:=a to b do ...
dove a e b devono essere di tipo integer e i viene incrementata alla 
fine di ogni ciclo. La guardia e` implicitamente a<=b.
cioe` un for e` equivalente a
i:=a;
while i<=b do begin
  <statement>
  i:=i+1;
end;
Questo schema vale in molti linguaggi, che io sappia solo C e C++
consentono uno schema piu` generale di for tale da renderlo
sostituibile al while in ogni contesto.
In effetti sulla base di questo ragionamento io non uso mai il for se 
non per esprimere uno schema di iterazione lineare quale lo
scorrere tutti gli elementi di una lista. Una ricerca preferisco 
esprimerla con un while. Puo` sembrare una scelta arbitraria
(e in effetti lo e`), ma ha almeno il vantaggio di non disorientare 
troppo chi proviene da altri linguaggi ed ha poca familiarita` col C++.
Per il resto e` piu` una convenzione stilistica e come tale
soggettiva.


 esprimerla con un while. Puo` sembrare una scelta arbitraria
Mi sembra giusto.
Se fossimo di lingua inglese questa distinzione non sarebbe neanche tanto
arbitraria.
for - per (ogni)...
while - fintanto che...
(do...until) - fai...fino a che (non è del C, ma mi sembrava utile)
do...while - fai ... fintanto che
Nei casi dubbi, il problema rimane.
--
Alessandro Monti