Azzurra IRC Network Forum

[C]problema con struttuta di controllo if else

viridovix · 11/08/2005 13:58 · #1
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:



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);


purtroppo nn so perchè questo nn funziona :
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 :(
Gastaman · 14/08/2005 17:48 · #2
Quell'if è sempre vero, per non esserlo x dovrebbe essere contemporaneamente "A", "B" e "C"... devi usare && al posto di ||.
viridovix · 14/08/2005 20:26 · #3
if ((strcmp(x,"A")==0)||(strcmp(x,"B")==0)||(strcmp(x,"C")==0))
{ {
strcpy(buf,"fatto"));
}
else (strcpy(buf,"fatto"));
send(ds_sock_acc,"\nfila inesistente\n",30,0);
}
while (strcmp(buf,"fatto")!=0);

cosi funziona mettendo gli and nn svolgerebbe il suo compito, grazie x l'aiuto :)
sottovento · 21/11/2005 10:35 · #4
In effetti ha ragione Gastaman, devono essere degli AND (&&).
Ti sembra che non funzioni perche' hai problemi da altre parti:
recv(ds_sock_acc,&x,2,0);
printf("%s",&x);

essendo x dichiarato come char x[1024], dovresti togliere gli &. Vai a scrivere in una locazione inesistente che, per tua fortuna, era all'interno del tuo spazio di indirizzamento. Questo dunque ha impedito alla tua applicazione di andare in crash.

Ricorda di controllare l'esito della send e recv!!!

ciao
sottovento