O problema maior é que, primeiro a condição do while é testada, só depois ocorre o que está entre {}, ou seja, só depois de testada é que os dados são pedidos.
Você poderia pedir esses dados uma vez, antes de testar (o teste continuará no while, só o pedido, por scanf, que será antes).
Por exemplo, você pede os dados e checa eles com um 'if'. Caso um dele seja 0, o while nem executa.
Outro meio seria repetir o que acontece dentro do while, mas antes do while. Só pra pedir os dados e garantir que não chegue lixo no teste do while:
printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); while( (n1!=0 && n2 !=0) && (n1 %2 ==0 && n2 %2== 0) ) { printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); }
Os scanf do while continuam a existir lá...isso de pedir antes, colocar valores inicias nas variáveis, repetir o código etc, são só meios que encontrei pra não ir lixo pro teste(sabia que, por azar, o lixo poderia ser 0 e 0 ?).
Eu usaria o 'do...while', ele executa o código uma vez e só depois que realiza o primeiro teste no while.
Ficaria perfeito no seu exemplo, mas não fiz porque acho que está estudando while e tentei criar soluções só com ele mesmo, mas ficaria assim:
do { printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); }while( (n1!=0 && n2 !=0) && (n1 %2 ==0 && n2 %2== 0) );