Introdução a c- jogo da vida, 1º duvida | ZWAME Fórum
Introdução a c- jogo da vida, 1º duvida
Discussão em 'Programação' iniciada por Syfer, 21 de Dezembro de 2008. (Respostas: 9; Visualizações: 1537)
Tenho que fazer o jogo da vida de conway, muitas duvidas deverao aparecer, mas por enquanto gostaria de saber que condição acrescento para no caso de nao se introduzir um numero, mas sim uma letra ou ou caracter dar um erro em printf,
o codigo será qq assim:
printf("\n Introduza o numero da linha onde quer colocar a celula: ");
if (i>TAM || i<0)
printf("\n Linha fora do tabuleiro!\n");
while (i>TAM || i<0);
e tentei assim sem sucesso:
[COLOR="Red"]else
printf("\n Instrucao invalida\n"); [/COLOR]
esta a funcionar bem a menos que o utilizador escreva uma letra.
Ja agora outra coisa, se tenho o tamanho de uma matriz definido com um define
int i, j, tabuleiro[TAM][TAM];
a alguma maneira de o utilizador alterar esse valor para neste caso alterar o tamanho do tabuleiro?
Tens de testar o valor devolvido pelo scanf. O scanf devolve o número de variáveis lidas com sucesso, isto é, nesse caso, se ele ler uma letra, ao tentar atribuir essa letra a uma variável do tipo int, vai devolver o valor 0 porque são de tipos diferentes. Se tivesse lido um int, devolvia 1, indicando que leu com sucesso.
No scanf() não deveria de ser "%d" ?? É que está, "%i".
EDIT: Jà vi que dá das duas formas.
Syfer disse: ↑
Tens duas maneiras de fazer isso:
- Pedir ao utilizador para inserir e depois fazes scanf para ler o valor
- Receber como argumento quando inicias o programa. Para isso vais buscar o valor a argv.
Se preferires a segunda, posso deixar-te depois um exemplo para perceberes o funcionamento
Em relação à tua primeira dúvida, parece-me que esse '&' atrás da variável não devia aí estar. Tenta tirar para ver se resolve.
tem de ter o & sim, no scanf queres passar o endereco de memoria da variavel onde queres que o scanf ponha o valor que escreveste ...
uma possivel maneira de fazeres isso é receberes primeiro num array e depois converter para inteiro ... deves estar com aqueles problemas de "loops infinitos" quando metes uma letra por exemplo
|[Kaos]|;4060225 disse:
Tens razão, no caso das strings é que não é preciso. My bad...
uma possível maneira de receberes os dados (nao perfeita) pode ser:
i = atoi(cmd); // converte comando para inteiro
if (( i < 0 || i > TAM ) && (cmd[0] - '0' < 10) )  { // verifica dimensoes e se o primeiro caracter e' um inteiro
if (cmd[0] - '0' > 9)  { // erro caso primeiro caracter nao seja um inteiro
printf("\n Comando invalido!\n");
while (( i < 0 || i > TAM ) && (cmd[0] - '0' > 9));
so que desta maneira se meteres por exemplo "1a" a função atoi() converte para "1" , ignorando todos os caracteres que venham a seguir ao primeiro char (nao tenho a certeza btw). Mas dessa maneira se meteres uns caracteres já não da aqueles loops.
Em relação ao #DEFINE , não podes alterar o valor deles, se quiseres fazer vectores dinâmicos, tens de ser tu a alocar a memória.
pois ja me tinha falado no atoi, mas estou limitado à materia que dei e disso ainda nao falamos, teria que ser qualquer coisa como um simples else, mas nao consigo arranjar maneira de faze-lo funcionar.