instrução DO WHILE

AMSA

Suspenso
Boas pessoal.

Tnh uma condição que quero impor ao utilizador. Neste caso quero q, num intervalo de 0 a 12, restringir 3 valores, o 3, 4 e 8 com um do while.

do{ não interessa
}while ((c>=12)||(c<=0)||(c==3||c==4));
não interessa.

O problema é q nessa condicao ja estou a excluir o 3 e o 4, falta-me o 8. Já tentei algumas combinações com parentesis etc.. e nada.

Como faço para meter o 8 a ser excluido?

Cumps.
 
nao funciona.. portanto, ele assume o valor q nao quero q seja assumido. Isto é, supostamente o 8 nao devia dar e dá.. meto o 8 e ele segue com o programa.. nao deveria de seguir, mas sim voltar a fazer a pergt.

Cumps.
 
oi

Acabei de criar este codigo e funcionou tudo bem (compilei e executei no cygwin):

#include <stdio.h>

int main (void){
int a;
do{
printf ("Insira:");
scanf ("%d",&a);
}while ((a>=12)||(a<=0)||(a==3)||(a==4)||(a==8));

printf ("numero: %d",a);

return 0;
}


Axo k é igual ao do Mr. Brightside, mas funcionou perfeitamente.
;)
 
opá isso é estranho pk eu esprimentei o codigo e deste aqui funciona bm...de certeza k não te está a faltar um promenorzito?
eu fix assim:

#include <iostream>
using namespace std;
int main()
{
int c;
do{ cout << "teste" << endl;
cin >> c;
}while(c >= 12 || c <= 0 || c == 3 || c==4 || c == 8);
}

cumps;D
 
Se bem entendi, o que precisas é de, num intervalo de 0 a 12, excluir os algarismos 3, 4 e 8.

Se é isso, em Perl seria qualquer coisa assim (não deve ser muito complicado adaptares para a linguagem que estejas a usar):
Código:
#!/usr/bin/perl 

my $res;
do {
    print q|Gi'me a number pueeese (between 0 and 12 but not 3, 4 or 8!): |;
    chomp($res = <>);
} while ( $res >= 0 && $res <= 12 && $res != 3 && $res != 4 && $res != 8  )

Por outro lado, teria mais piada se fosse escrito assim:
Código:
#!/usr/bin/perl 

my $res;
do {
    print q|Gi'me a number pueeese (between 0 and 12 but not 3, 4 or 8!): |;
    chomp($res = <>);
} while ( $res =~/^[0125679][0-2]?$/ );

mas creio que expressões regulares não sejam uma hipótese.
 
segundo percebi deve ser isto:

while ((c<=12 && c>=0) && (c != 8 || c != 4 || c!=3))

ou seja, tens um intervalo do genero c pertenca a: [0, 12] \ {3, 4, 8}
 
Roke o teu exemplo parece ter bastante logica :P Não descurando dos outros, mas de facto eu nao consigo por o exemplo do Mr. Brightside a funcionar.. é estranho. Tinha feito o mesmo intervalo, de 0 a 12 a excluir 2 pontos e so funcionou com parentesis, mesmo fazendo logica da maneira que tinha posto pela primeira vez.

Do genero:

#include <stdio.h>

int a;

do{
printf ("Qual a primeira cor?");
scanf ("%d",&a);
}while ((a>=12 ||a<=0)||a==3||a==4);

printf ("numero: %d",a);

return 0;
}

Isto deveria funcionar.. e não funciona.. tentei por diferente != e deveria funcionar.. pela logica e não funcionava.. não aceitava todos os valores abaixo != (x).

Tive que meter assim:

}while ((a>=12 ||a<=0)||(a==3||a==4));

Assim já funcionou.

Mais daqui a nada digo-vos qual das vossas sugestões foi aceite, bem como o excerto do codigo.

Tou a utilizar o MS Visual Studio.. não digam a vossa opinião pq já li mais de milhares de vezes aqui debates sobre compiladores =P

Cumps.
 
Rocke SLB exprimentei como disseste e nao dá..

Aqui esta o excerto do codigo:

do{
printf("4 banda? ");
scanf("%d",&d);
}while ((c<=12 && c>=0) && (c != 8 || c != 4 || c!=3));

Mais ideias? tou lixado com isto lol. So me falta isto bah
 
Ya. Por exemplo, meto o 3 e ele funciona a mesma, apresentando o resultado em branco. tou aqui a anhar.. mesmo.

Por exemplo:

while ((c>=12||c<=0) || (c==6));

isto assim deveria funcionar.... PEDIR O MESMO ENQUANTO O C for MAIOR 12 ou MENOR Q 0 e C for IGUAL A 6!

Meto o 6 e ele funciona..
 
Última edição:
Uma coisa mto estranha é q estou a por este excerto:

#include <stdio.h>

int main() {
int a, c;

do{
printf ("Qual a primeira cor?");
scanf (" %d",&c);
}while ((c>=12)||(c<=0)||(c==3||c==4));

printf ("numero: %d",c);

return 0;
}

aparte do meu programa principal e ele funciona.. e no meu programa principal ele nao funciona.. não percebo pq, é por estas e por outras q ninguem gosta desta maravilha. Tou mesmo em brasas FDS.
 
#include <stdio.h>

int main() {
int a, c;

do{
printf ("Qual a primeira cor?");
scanf (" %d",&c);
}while ((c>=12)||(c<=0)||(c==3||c==4));

printf ("numero: %d",c);

return 0;
}
Isto funciona perfeitamente no meu.
Já experimentaste com outra coisa sem ser MS Visual Studio?
 
Ja ta a bombar! lol

Problema: nao estava a alterar a variavel qd colava o excerto do programa do projecto aparte do meu principal. O q estava a utilizar para exprimentar :X

Bem, agora numa fase de aperfeiçoamento, queria saber como posso meter o valor da % no printf.

Qd meto por exemplo ....... tolerancia: 20 % o % não aparece no printf, fica um espaço em branco.

Acho q há um truque mas nao tou lembrado. Será com o escape?

EDIT: e ja agr há alguma maneira de por o +- num so? Isto é, o + por cima do - lol.
 
e isto no printf: ± .

Como meto? Na tabela ASCII nao existe. So se existir uma maneira de por sublinhado e assim basta meter o +. Da para fazer isso?

EDIT: Bem ja tive a pesquisar e pelo q vi, dar até dá, mas dá é mto trabalho e implica ate tirar excertos da net e isso nao justificaria o trabalho à apresentar.. não é da minha autoria portanto perde a piada.

Vai ficar apenas +-.
 
Última edição:
Bem, para finalizar, alguém sabe dizer-me como bloquiar a introdução de letras numa menu so com numeros?

Tipo tenho um menu de 1 a 4. Faço a macacada dos intervalos q permite apenas seleccionar de 1 a 4 mas dps não se descura a selecção das letras. Por exemplo, se eu ponho uma letra qd vou para seleccionar uma letra no menu, o programa mama-se todos, começa a escrever montes de caracteres, letras, numeros, etc na janela.. mto rapido.

Há alguma maneira de impedir isto?
 
Back
Topo