C/Instrucións de control: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
Completado co contido do artifo actual de if.
Gallaecio (conversa | contribucións)
Ampliado co contido do artigo sobre o switch
Liña 42:
 
E por suposto, dentro dunha instrución de control <source lang=c enclose=none>if</source> (ou <source lang=c enclose=none>else</source>) pode haber outra instrución <source lang=c enclose=none>if</source>, ou calquera outra instrución de control.
 
==<source lang=c enclose=none>switch</source>==
A instrución de control <source lang=c enclose=none>switch</source> permite executar distintas instrucións en función dos valores dunha expresión (ou condición). A súa sintaxe fundamental é a seguinte:
<source lang=c>
switch(expresión){
case valor1: instrución;
case valor2: instrución;
...
case valorn: instrución;
default: instrución;
}
</source>
 
Para definir unha serie de instrucións para un valor, dentro da instrución de control escríbese <source lang=c enclose=none>case</source>, seguido do valor para o cal se van definir as instrucións, seguido de dous puntos, «<code>:</code>», e seguido da instrución ou instrucións.
 
En cada <source lang=c enclose=none>case</source>, despois dos dous puntos, pode haber máis dunha instrución. Para isto non fai falla utilizar un [[{{PAGENAME}}#Bloques de instrucións|bloque]], senón que abonda con escribir directamente as instrucións as unhas despois das outras.
 
Adóitanse seguir as instrucións asignadas a cada opción dunha instrución de control [[{{PAGENAME}}#break|<source lang=c enclose=none>break</source>]] ou [[{{PAGENAME}}#return|<source lang=c enclose=none>return</source>]], mesmo no último caso (xeralmente o <code>default</code>), onde sería completamente innecesario un <code>break</code>. De non utilizarse unha destas instrucións de control, non se executarían só as instrucións asignadas ao <source lang=c enclose=none>case</source> co valor da expresión, senón todas as instrucións dos <source lang=c enclose=none>case</source> seguintes. Mediante o <source lang=c enclose=none>break;</source> sáese do [[{{PAGENAME}}#Bloques de instrucións|bloque]] do <source lang=c enclose=none>switch</source>, mentres que mediante o <source lang=c enclose=none>return</source> sáese de toda a función que contén a instrución de control.
 
Por último, <source lang=c enclose=none>default:</source> indica as instrucións que se executarán en caso de que o valor da expresión non se corresponda con ningún dos <source lang=c enclose=none>case</source>.
 
===Acumulación de valores nun <source lang=c enclose=none>switch</source>===
Este funcionamento do <source lang=c enclose=none>switch</source> de partir do <source lang=c enclose=none>case</source> que se corresponda coa expresión pero executar todas as instrucións dende dito punto ata que se atope cunha instrución de control de saída pode utilizarse para acumular distintos valores para unha mesma instrución ou grupo de instrucións. Véxase para comprendelo o seguinte exemplo:
<source lang=c>
switch(expresión){
case 1:
case 6: // A función printf() imprime en pantalla o texto pasado como argumento.
case 10: printf("Verás este texto se a variable vale 1, 6 ou 10.\n");
break;
case 2: printf("Verás este texto se a variable vale 2.\n");
break;
default: printf("Verás este texto se a variable non vale nin 1, nin 2, nin 6 nin 10.\n");
break;
}
</source>
 
===Expresións de tipo <source lang=c enclose=none>char</source> nun <source lang=c enclose=none>switch</source>===
Ao entrar nunha instrución de control <source lang=c enclose=none>switch</source> que opera sobre os distintos valores dun carácter, é preciso utilizar un [[{{BASEPAGENAME}}/Moldes|molde]], [[{{BASEPAGENAME}}/Tipos fundamentais|<source lang=c enclose=none>(char)</source>]], para indicarlle ao <source lang=c enclose=none>switch</source> que non se trata dun número.
<source lang=c>
switch((char)expresión){
case 'a': printf("O carácter é «a».\n"); break;
case 'z': printf("O carácter é «z».\n"); break;
default : printf("O carácter non é nin «a» nin «z».\n");
}
</source>