Istruzione if e operatore logico

di Anonimizzato19537 il
11 risposte
Salve a tutti non riesco a capire il senso di questa riga di codice

if(stringa1[] && stringa2)
cosa fa? mi controlla solamente se sono non vuoti?

11 Risposte

  • Visto che qualunque valore ritornato diverso da 0 viene considerato come true, facendo if(10) 10!=0 quindi viene considerato true. Ma con altre cose che non siano bool o numeri dovrebbe essere errore
  • Io ho un esercizio e c'è scritto questo

    s e t sono due stringhe
    
    while (s[i++]!=t[j++])
    	if(s[i] && t[j]) c++;
    	else break;
    
  • Ah allora così cambia. Credo che prenda il valore del carattere indicato quindi s e lo converta in int, per poi vedere se è un carattere. Praticamente se int(s) è 0, vuol dire che é vuoto, non è un carattere. Prova a stampare questo char(0) e vedrai che non esce niente. Quindi alla fine if(s è un carattere e t[j] è un carattere) c++; il ciclo continua finché arriva alla fine di una delle due stringhe

    Edit

    Oppure si interrompe se il carattere analizzato di s e quello di t sono uguali
  • Ok ora ho capito sei stato gentilissimo in effetti il programma stampa il numero di lettere che differenziano due parole, però non riuscivo a spiegarmi quell'if grazie mille sei stato gentilissimo
  • Prego
  • In effetti quello che avevi scritto prima

    if(stringa1[] && stringa2)

    era completamente diverso ... e senza senso
  • oregon ha scritto:


    In effetti quello che avevi scritto prima

    if(stringa1[] && stringa2)

    era completamente diverso ... e senza senso
    hai pienamente ragione oregon, ma preso dalla fretta ho scritto di getto
  • ANDPRI ha scritto:


    Ah allora così cambia. Credo che prenda il valore del carattere indicato quindi s e lo converta in int, per poi vedere se è un carattere.


    Non converte alcunché. I char sono piccoli interi nel 100% delle implementazioni, possono essere privi di segno o meno per default (dipende dal compilatore). In ogni caso, espressioni come quelle indicate costituiscon un confronto implicito con lo zero: quindi, nel caso di array di char ASCIIZ, controllano che il carattere corrente non sia il terminatore di stringa '\0'.

    Si noti che questo stile di codifica è esplicitamente proibito da norme di codifica come la MISRA/C (in particolare viola le regole 12.6 e 13.3).
  • M.A.W. 1968 ha scritto:


    ANDPRI ha scritto:


    Ah allora così cambia. Credo che prenda il valore del carattere indicato quindi s e lo converta in int, per poi vedere se è un carattere.


    Non converte alcunché. I char sono piccoli interi nel 100% delle implementazioni, possono essere privi di segno o meno per default (dipende dal compilatore). In ogni caso, espressioni come quelle indicate costituiscon un confronto implicito con lo zero: quindi, nel caso di array di char ASCIIZ, controllano che il carattere corrente non sia il terminatore di stringa '\0'.

    Si noti che questo stile di codifica è esplicitamente proibito da norme di codifica come la MISRA/C (in particolare viola le regole 12.6 e 13.3).


    Non credevo esistessero queste norme, quindi i partecipanti del ioccc sono dei fuorilegge? Scherzo, comunque è solo un esercizio per lo studio, mai potrei pensare una cosa del genere credo

    Grazie mille per la delucidazione sull'argomento
  • ilFaraone ha scritto:


    Non credevo esistessero queste norme, quindi i partecipanti del ioccc sono dei fuorilegge?
    In un certo senso sì, anche se i più banditi, per definizione, sono quelli di Underhanded C Contest...

    Per completezza di informazione, le norme di stile che possono interessare anche il programmatore mainstream sono la MISRA/C 2012, le Nasa Coding Guidelines e, per derivazione, il (che è semplicemente basato sui due precedenti, più un minimo di buonsenso ingegneristico).

    Il linguaggio C può essere usato in una infinità numerabile di contesti d'uso, dai più blandi e generalisti fino ai compiti di massima criticità affrontabili a livello di software e firmware. Pare piuttosto ovvio che, per evitare ogni rischio, in questi ultimi contesti si utilizzi un subset ristretto di C89 regolato dalle norme di stile sopra richiamate (e da altre molto più specialistiche), assieme a cross-compiler certificati ed a molti altri accorgimenti.
  • Grazie mille per le delucidazioni
Devi accedere o registrarti per scrivere nel forum
11 risposte