|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2005
Messaggi: 15
|
[C]problema con struttuta di controllo if else
IL codice in C gira sotto Linux 9.2, compilatore gcc.
Si tratta sempre di un client e server connessi tra loro tramite socket, con protocollo tcp. qui riporto la parte del server con la struttura if: Codice:
char x[1024],y[1024];
unsigned char z,w;
char buf[1024];
char buf2[1024];
do
{
send(ds_sock_acc,"\nInserisci fila :",20,0);
recv(ds_sock_acc,&x,2,0);
printf("%s",&x);
if ((strcmp(x,"A")!=0)||(strcmp(x,"B")!=0)||(strcmp(x,"C")!=0))
{
send(ds_sock_acc,"\nfila inesistente\n",30,0);
}
else (strcpy(buf,"fatto"));
}
while (strcmp(buf,"fatto")!=0);
if ((strcmp(x,"A")!=0)||(strcmp(x,"B")!=0)||(strcmp(x,"C")!=0)) se inserisco dal client il carattere A o B o C comunque sia il sever spedisce il messaggio fila inesistente. modificando cosi' riconosce invece ol carattere A: if ((strcmp(x,"A")!=0) { send(ds_sock_acc,"\nfila inesistente\n",30,0); } ma ovviamente nn mi fa gli altri confronti se modifico ulteriormente cosi if ((strcmp(x,"A")!=0) { send(ds_sock_acc,"\nfila inesistente\n",30,0); } else if (strcmp(x,"B")!=0) { send(ds_sock_acc,"\nfila inesistente\n",30,0); } ritorno al problema iniziale qualsiasi carattrere invio da client poi il server spedisce il messaggio fila inesistente. nn riesco a capire dove sia la magagna |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Oct 2002
Messaggi: 567
|
dico forse una stupidata, hai provato a mettere al posto di "A" -> 'A' e via discorrendo?
Fammi sapere |
|
|
|
|
|
#3 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Non ho capito bene quello che vuoi fare, ma ti ricordo che strcmp restituisce il valore 0 quando i suoi argomenti sono due stringhe uguali.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
(strcmp(x,"A")!=0)||(strcmp(x,"B")!=0)||(strcmp(x,"C")!=0)
Questa espressione è sempre vera... Se anche uno dei tre strcmp ritorna 0 (ricorda che strcmp ritorna 0 quando il primo parametro è uguale al secondo) gli altri due ritornano -1 o +1...quindi l'or ha sempre 1 come risultato... |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2005
Città: Cagliari
Messaggi: 54
|
Se ho capito, quello che intendi fare è che quando inserisci A, B, oppure C il server mandi in output: "fatto"..
Quindi se questo è quello che vuoi fare, potresti modificare il codice cosi: if ((strcmp(x,"A")==0)||(strcmp(x,"B")==0)||(strcmp(x,"C")==0)) { strcpy(buf,"fatto"); } else send(ds_sock_acc,"\nfila inesistente\n",30,0); In questo modo se una delle tre strcmp() nella condizione dell'if è vera, allora l'operazione eseguita sarà la strcpy(), altrimenti l'else successivo. Spero di esserti stato d'aiuto
__________________
Sapere di sapere quello che si sa e sapere di non sapere quello che non si sa: ecco il vero sapere... Confucio. |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jul 2005
Messaggi: 15
|
avete perfettamente ragione , sono stato un vero allocco
Ho corretto cosi: if ((strcmp(x,"A")==0)||(strcmp(x,"B")==0)||(strcmp(x,"C")==0)) { (strcpy(buf,"fatto")); } else send(ds_sock_acc,"\nfila inesistente\n",30,0); ora va Grazie |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:19.



















