Newsgroup: it.comp.lang.c++
Titolo: scanf

Ciao a tutti,
vorrei leggere 2 lettere da tastiera e stamparne l'ultima.
Ho fatto il seguente programmino ma mi legge 3 lettere e mi stampa la
penultima come mai?
#include <stdio.h>
#include <conio.h>
int tasto;
int main()
{
   clrscr();
   scanf("%c ",&tasto);
   scanf("%c ",&tasto);
   printf("%c",tasto);
   getch();
}
Grazie.

 ha scritto nel messaggio
news:6ya98.47186$nI1.1...@twister1.libero.it...


scanf("%c",&a[1]);
se non gli genera un'eccezione é fortunato... crederà che é giusto!
se a ha un solo elemento.. come fai a usarne 2???
Antonio

 due caratteri diversi...la variabile č sempre la stessa...il secondo scanf
Non mi interessa il primo valore, vorrei solo capire perchč mi chiede tre
volte
di inserire il carattere.
scanf("%c",&a) cambia da scanf("%c ",&a) ? //intendo lo spazio.
scanf("%c",&a[0]) cambia da scanf("%c",a[0]) ? //dato che č un array
E ancora (a==b==c) č come dire (a==b)&&(b==c) ?
Scusa le tante domande. :-)
Ciao.


Marco
PS. non usare mai i prototipi definiti in <conio.h> se intendi rendere un
programma "standard" e portabile.

 E ancora (a==b==c) è come dire (a==b)&&(b==c) ?
Si è lo stesso!


 Antonio

solo...ma 2!!
No a[N] contiene N elementi, quindi il tuo a[1] contiene 1 elemento.
-- 
Marco Barisione (ICQ 84277092)

 Il primo elemento e` zero!!Ed il secondo e` uno! ok?
Riprova, sarai piu` fortunato. Il numerino tra parentesi indica la
dimensione dell'array. Se dichiari:
int a[N];
allora  l'indice andra`  da 0  a (N  - 1). Nel  tuo caso  N =  0, quindi
l'indice va da 0 a 0...
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Tentare e` il primo passo verso il fallimento.
Homer J. Simpson

 ha scritto nel messaggio
news:j7w98.49819$5M4.1...@twister2.libero.it...


Sbagliato. Non è lo stesso. l'espressione a==b==c corrisponde ad a==(b==c),
dove l'espressione (b==c) ha come risultato un bool, quindi l'espressione
completa confronta a con un bool, il che non è certo quello che si vuole, e
soprattutto non è uguale ad (a==b)&&(b==c).
Marco

 Si è lo stesso!
No.
   ( a == b == c )
è equivalente a
   ( ( a == b ) == c )
Max


wrote:

in altre parole
 ((a==b) + (b==c)) == 2 
oppure 1==(a==b)==(b==c)
sarebbero equivalenti ad (a==b)&&(b==c) ?

 sarebbero equivalenti ad (a==b)&&(b==c) ?
In altre parole hai detto una cosa diversa... si parlava di ordine di
valutazione e sei finito sulla conversioni bool=>int :-)
Però sfruttare le conversioni di tipo bool=>int nel modo che fai
tu non mi pare esattamente una bella idea...
e non sono convinto che funzioni...
Per esempio, ammesso che a, b e c siano effettivamente uguali:
((a==b) + (b==c)) == 2
diventerebbe (true + true) == 2
a questo punto non so cosa succede esattamente.
Dipende se è definito l'operatore + sui bool, altrimenti può essere
che avvenga la conversione true=>1 e che quindi il risultato sia
2==2, che infine risulta true.
Ma non ci giurerei che sia garantito. Qualcuno mi illumina?
Comunque, ripeto, sfruttare le conversioni di tipo bool=>int nel modo
che fai tu non mi pare esattamente una bella idea.
--
Gerolamo

1==(a==b)==(b==c)
ok è sbagliata ma 
            (a==b) & (b==c)
oppure (a | b | c)==b
oppure (a ^ b ^ c)==a 
sono equivalenti ad (a==b)&&(b==c) ?
jk

 sono equivalenti ad (a==b)&&(b==c) ?
& e && sono due operatori diversi.
Come possono essere equivalenti (se non in casi particolari) ?
--
Gerolamo

 Ma non ci giurerei che sia garantito. Qualcuno mi illumina?
Sia i bool che i char, quando vengono utilizzati in espressioni aritmetiche,
vengono convertiti in int prima che l'operatore abbia effetto.
Ciao,
Cecco

Come possono essere equivalenti (se non in casi particolari) ?
Se (a==b) e (b==c) possono assumere solo i valori: 0 1 allora
&&         (a==b)        (b==c)            &
  1      |        1       |       1          |      1
  0      |        0       |       1          |      0
  0      |        1       |       0          |      0
  0      |        0       |       0          |      0
Quindi ((a==b) & (b==c))==((a==b)&&(b==c))
dovrebbe essere sempre vera.
jk

 l'indice va da 0 a 0...
Piu' esattamente da 0 a -1 . Altrimenti un elemento ci sarebbe...
Ciao,
Nicola

 Piu' esattamente da 0 a -1 . Altrimenti un elemento ci sarebbe...
s/"N = 0"/"N = 1"/
...sara` che ho la febbre. Nel suo esempio N era uguale a 1, quindi
nell'array c'era un solo elemento.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il piu` bel momento dell'amore e` quando ci si illude che duri
per sempre; il piu` brutto, quando ci si accorge che dura
da troppo.

 sono equivalenti ad (a==b)&&(b==c) ?
Solo la prima, le altre due no.
Ciao,
Cecco

 dovrebbe essere sempre vera.
Questo è logico, ma le espressioni (a==b) e simili restituiscono un bool, e
su di essi gli operatori & e && sono equivalenti, ma questo è appunto un
caso particolare.
Ciao,
Cecco


non ho detto che sono equivalenti gli operatori, ho solo detto che
potrebbero essere equivalenti le due espressioni (o piů espressioni
equivalenti alla finale)