Istruzione if e operatore logico

di il
11 risposte

Istruzione if e operatore logico

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

  • Re: Istruzione if e operatore logico

    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
  • Re: Istruzione if e operatore logico

    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;
    
  • Re: Istruzione if e operatore logico

    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
  • Re: Istruzione if e operatore logico

    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
  • Re: Istruzione if e operatore logico

    Prego
  • Re: Istruzione if e operatore logico

    In effetti quello che avevi scritto prima

    if(stringa1[] && stringa2)

    era completamente diverso ... e senza senso
  • Re: Istruzione if e operatore logico

    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
  • Re: Istruzione if e operatore logico

    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).
  • Re: Istruzione if e operatore logico

    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
  • Re: Istruzione if e operatore logico

    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.
  • Re: Istruzione if e operatore logico

    Grazie mille per le delucidazioni
Devi accedere o registrarti per scrivere nel forum
11 risposte