Declarações em C [RESOLVIDO]

1. Declarações em C [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 10/08/2016 - 06:40h

Olá, eu estou com um programa em andamento, e gostaria de saber se tem uma forma, digamos, mais elegante, de declarar essas variáveis na função char.

E se com essas funções eu terei o correto retorno, não posso testar agora pois estou acessando do celular, escrevi no caderno o código.

To em dúvida sobre essas funções... se alguém puder me esclarer, ficarei grato.

int main()

{

FILE * pFile;

int keys = {letra0='a', letra1='b',letra1='c',letra2='d',letra3='e',letra4='f',letra5='g',letra6='h',letra7='i',letra8='j',letra9='k',letra10='l',letra11='m',letra12='o',letra13='p',letra14='q',letra15='r',letra16='s'
letra17='t',letra18='u',letra19='v',letra20='x',letra21='z',letra22='y'};

char test;

..............
E então entra no loop do switch case;

switch(keys) // the cool routine.
{
case a:
gets(a);
if ( a == NULL);
{
perror("error...");
}
else
{
putc(a, pFile);
break;
.........................................

A proposta é retornar a tecla pressionada em um arquivo, para entrar no código de um jogo que to desenvolvendo com um amigo. No windows consegui usando GetASyncKeyState() fácil, aqui eu 'gambiarrando', usando switch case para isso acho que não é exatamente o melhor modo de tratar essas funções...

Estou aberto a ajuda!!




  


2. Re: Declarações em C [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 10/08/2016 - 09:08h

Penso que vale a pela validar a entrada, utilizando ctype:


#include <ctype.h>
#include <stdio.h>

int main(void) {
char entrada;
scanf("%c", &entrada);

if (!isalpha(entrada)) {
perror("Entrada não é válida [a-z|A-Z]");
return -1;
}

switch (entrada) {
case 'a':
break;
case 'b':
break;
default:
break;
}

return 0;
}

--
Uilian Ries
Linux Counter: 521986


3. Re: Declarações em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/08/2016 - 14:42h

Seu código tá muito bagunçado.
Não dá para saber qual o objetivo.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: Declarações em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/08/2016 - 19:49h

De fato, não dá mesmo para entender o que o autor do tópico quer. Além do código confuso, o próprio texto da pergunta e o complemento que vêm depois também não ajudam muito, com perguntas sem objeto claro e coisas absurdas, como “declarar (...) variáveis na função char” (sic).


5. Re: Declarações em C [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 10/08/2016 - 23:12h

paulo1205 escreveu:

De fato, não dá mesmo para entender o que o autor do tópico quer. Além do código confuso, o próprio texto da pergunta e o complemento que vêm depois também não ajudam muito, com perguntas sem objeto claro e coisas absurdas, como “declarar (...) variáveis na função char” (sic).


Bom, Paulo. Já que tu é o espertalhão não precisa de muito pra entender as coisas.
Ou precisa? Pelo jeito precisa. E muito.

Quem é esperto pega de primeira as coisas, e não tenta diminuir ninguém.

Assim como o primeiro rapaz que comentou, e me ajudou.

Seria um 'absurdo' se eu viesse com códigos certos, ou copiados, e pedisse ajuda para entender.

É. O que acontecerá se não ser atribuído um valor pra char? Que agora já é int. Me equivoquei ao escrever 'declarar variáveis na função char'.

Estava mais de um dia sem dormir. Mas isso não importa.

Fique em paz e tente ser menos arrogante.



6. Re: Declarações em C [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 10/08/2016 - 23:13h

uilianries escreveu:

Penso que vale a pela validar a entrada, utilizando ctype:


#include <ctype.h>
#include <stdio.h>

int main(void) {
char entrada;
scanf("%c", &entrada);

if (!isalpha(entrada)) {
perror("Entrada não é válida [a-z|A-Z]");
return -1;
}

switch (entrada) {
case 'a':
break;
case 'b':
break;
default:
break;
}

return 0;
}

--
Uilian Ries
Linux Counter: 521986



Boa ideia, amigo! Muito obrigado.

Vou continuar o desenvolvimento do código.



7. Re: Declarações em C [RESOLVIDO]

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 10/08/2016 - 23:24h

listeiro_037 escreveu:

Seu código tá muito bagunçado.
Não dá para saber qual o objetivo.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Amigo, tudo bem com você?

Deixei explícito o objetivo.

"" A proposta é retornar a tecla pressionada em um arquivo, para entrar no código de um jogo que estou desenvolvendo com um amigo. No windows consegui usando GetASyncKeyState() fácil, aqui eu estou 'gambiarrando', usando switch case para isso, acho que não é exatamente o melhor modo de lidar com tais funções. ""


cara, preciso ser mais específico?

eu preciso das letras a à z declaradas. então o switch case vai 'cuidar' do processo de analisar se tal tecla foi pressionada durante o jogo. E então com o uso do putc. transferir o caractere digitado para um arquivo de texto puro. Ou para simplesmente armazenar, para então esses caracteres serem reusados durante o jogo.

Espero que tenha ficado claro.


8. Re: Declarações em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/08/2016 - 23:28h

int keys = {letra0='a', letra1='b',letra1='c',letra2='d',letra3='e',letra4='f',letra5='g',letra6='h',letra7='i',letra8='j',letra9='k',letra10='l',letra11='m',letra12='o',letra13='p',letra14='q',letra15='r',letra16='s'
letra17='t',letra18='u',letra19='v',letra20='x',letra21='z',letra22='y'};


Mas isso aqui não é um vetor.
Deveria ter colchetes [ e ] para ser vetor (ou array).
Além disto tem cara de uma outra coisa chamada de enumeração.
Enumeração trabalha com um comando chamado enum.

Agora não sei se no caso do switch seria o caso de se testar usando for:

char minha_var = alguma letra;
char c;

for (c='a';c<='z';c++) {
if (minha_var == c) {
(...)
ou
uma_funcao();
(....)
}
}


Talvez se estivesse em linguagem descritiva de algoritmo ficasse mais simples.
Você quer abrir ou criar um arquivo, pegar uma tecla pressionada e jogar esta tecla no arquivo?
Qual o objetivo do jogo? Você poderia dizer?

EDIT : Demorei demais para digitar.

Então me desculpe, sou meio burro.
Vou procurar outra coisa para fazer.
Boa sorte.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Declarações em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/08/2016 - 00:44h

Let's begin:
char é um tipo e não uma função e keys não pode ser um array ou vetor do jeito que você fez.




Se eu fosse você, eu trataria o paulo1205 e o listeiro_037 com muito mais respeito. Eles são uns dos membros que mais contribuem com o forum no contexto de programação, e ajudam muita gente por aqui.
A propósito não foi dito nenhuma besteira da parte deles, o seu code está realmente confuso e escrito de maneira errônea (eu que sou super leigo em C, reparei).

Particularmente eu não escreveria os codes dentro dos cases de switch, eu escreveria funções separadas e chamaria no nos cases apenas. Menos confuso e mais organizado.

Talvez estre techo de code possa lhe ajudar em algo, segue o code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
FILE *filefd;
char input[1];
char output_file[16] = "/var/tmp/filefd";
char match[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int aux=0;

if((filefd=fopen(output_file,"w"))==NULL)
{
fprintf(stderr,"unable to open file to write");
exit(1);
}
else
{
printf("Chose a caracter: ");
if(scanf("%1c",input)==0 || strspn(input,match)==0)
{
fprintf(stderr,"invalid input\n");
exit(1);
}
for(aux=0;input[aux];aux++)
if(input[aux]=='a')
{
fprintf(filefd,"%c\n",input[aux]);
printf("File wrote at: %s\n",output_file);
fclose(filefd);
exit(0);
}
else
{
printf("Do another thing you want\n");
exit(0);
}
}
return 0;
}

--
Just bring us some beers, and then we can talk about our systems. :)



10. Re: Declarações em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/08/2016 - 14:42h

mrx6s0 escreveu:

Bom, Paulo. Já que tu é o espertalhão não precisa de muito pra entender as coisas.
Ou precisa? Pelo jeito precisa. E muito.


Se você chama de “muito” lembrar que os outros não pensam com a sua cabeça e que, portanto, você tem de ser claro quando se expressar por escrito, então, eu preciso, sim, de “muito”. E muito.

Quem é esperto pega de primeira as coisas, e não tenta diminuir ninguém.


Mostre qualquer tentativa de diminuí-lo. Não é preciso muita honestidade intelectual para constatar que eu não fiz nenhum ataque pessoal e que, além disso, tudo o que eu disse era absolutamente verdadeiro.

Eu disse que o código estava confuso. E estava. E não estava apenas confuso, mas também errado, e faltando partes necessárias para o entendimento.

Eu disse que o texto original da pergunta e o complemento não ajudavam a esclarecer o código mostrado. E não ajudavam.

Eu disse que as perguntas não tinham um objeto claro. E não tinham. Veja: você perguntou sobre “essas variáveis”, sem explicitar quais; continuou o assunto mencionando “essas funções”, mas também não apontou de quais funções estava falando ou em qual parte do código elas estavam; seguiu falando sobre o “loop do switch case”, mas não mostrou nenhum loop; apresentou “a proposta”, como se tivesse claro o que quer, mas não refletiu essa clareza no espaço do debate; e concluiu dizendo que estava “gambiarrando” (sic) e que achava que não era o melhor modo de tratar “essas funções”.

Eu disse que você escreveu coisas absurdas. E escreveu. E não só aquele exemplo. Há outras coisas que não fazem sentido em C, tais como a declaração de todas as variáveis (exceto pFile, que parece correta) ou o uso de um valor não-constante (e aparentemente de tipo ponteiro, ainda por cima) como label do case.

Mas note: confuso, sem objeto e absurdos foram qualificações atribuídas ao texto, não a você.

E mesmo tais qualificações dizem respeito apenas ao conteúdo, não à forma ou ao estilo. Se eu quisesse pegar no seu pé ou, como você disse, diminuí-lo, eu poderia gastar tempo com críticas à ortografia ou pontuação. Mas eu não faço isso (a não ser que me peçam), e definitivamente não fiz nada parecido com você.

Assim como o primeiro rapaz que comentou, e me ajudou.


Que bom para você que o que ele disse lhe serviu.

Note, porém, que a resposta dele foi no sentido de “validar entrada”. E você não apresentou ou perguntou a respeito de nenhuma ideia parecida com essa no seu texto original, e muito menos no título do tópico.

Para responder a você, o uilianries foi muito além da letra que você escreveu. Eu admito abertamente que não tenho essa imaginação.

Seria um 'absurdo' se eu viesse com códigos certos, ou copiados, e pedisse ajuda para entender.


Por quê? Se fosse um código complexo ou muito engenhoso, não vejo o menor problema em pedir ajuda para entender.

É. O que acontecerá se não ser atribuído um valor pra char? Que agora já é int. Me equivoquei ao escrever 'declarar variáveis na função char'.


Depende de onde.

Estava mais de um dia sem dormir. Mas isso não importa.


Não importa mesmo. Num espaço de comunicação por escrito, vale, em princípio, o que está escrito.

Fique em paz e tente ser menos arrogante.


Eu estou em paz. E lhe desejo o mesmo.


11. Re: Declarações em C

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 12/08/2016 - 05:45h

uilianries escreveu:

Penso que vale a pela validar a entrada, utilizando ctype:

[code]
#include <ctype.h>
#include <stdio.h>

int main(void) {
char entrada;
scanf("%c", &entrada);

if (!isalpha(entrada)) {
perror("Entrada não é válida [a-z|A-Z]");
return -1;
}

switch (entrada) {
case 'a':
break;
case 'b':
break;
default:
break;
}

return 0;
}


Amigo, dei uma adaptada no seu código, primeiramente consegui rodar, mas sem o retorno do arquivo em texto. E agora eu não sei onde está o erro exatamente.
Pretendo incluir o tabelaa ascii, será super útil nesse caso.

Bom, a aplicação que estou desenvolvendo é basicamente um 'flash-memory', ou seja, apareceram 'dicas' na tela, ficarão visíveis por alguns segundos, e então, sumiram, e a próxima matriz assume a tela. Então, o usuário terá que digitar o que estava escrito na tela naqueles segundos. Começa com palavras pequenas, e conforme o usuário vai avançando, surgem frases e palavras mais complexas. Dicas complexas.

[code]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()

{

FILE * file;

char k;

scanf("%c", &k);


if (!isalpha(k)) {

perror("error\n");

return -1;

}

switch(k) // routine...
{
//* com a inclusão dos caráctes ascii*/
case '97':
file = fopen("log1.txt","a++");
fputs("a",file);
fclose(file);
break;
case '98':
file = fopen("log1.txt","a++");
fputs("b",file);
fclose(file);
break;
case '99':
file = fopen("log1.txt","a++");
fputs("c",file);
fclose(file);
break;
case '100':
file = fopen("log1.txt","a++");
fputs("d",file);
fclose(file);
break;
case '101':
file = fopen("log1.txt","a++");
fputs("e",file);
fclose(file);
break;
case'102':
file = fopen("log1.txt","a++");
fputs("f",file);
fclose(file);
break;
case '103':
file = fopen("log1.txt","a++");
fputs("g",file);
fclose(file);
break;
case '104':
file = fopen("log1.txt","a++");
fputs("h",file);
fclose(file);
default:
break;
}

return 0;
}
*/
//* 97 = a ; 98 = b / 99 = c ; 100 = d ; um modo mais eficiente de ligar com as teclas. */

[quote]
Bom, o que se vê é que necessito declarar os carácteres ascii para poder continuar... pesquisando, foi o método mais eficaz que eu encontrei.
se puder me dar uma luz, ficarei grato!
--
Uilian Ries
Linux Counter: 521986





12. Re: Declarações em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/08/2016 - 19:45h

Cara, porque tu não posta o teu code inteiro pra gente entender isso? porque veja bem:

Na primeira resposta tu disse:
"A proposta é retornar a tecla pressionada em um arquivo..."

e na mais recente disse:
"....a aplicação que estou desenvolvendo é basicamente um 'flash-memory', ou seja, apareceram 'dicas' na tela..."

Até da pra entender o que tu quer fazer, mas ainda ta meio estranho, tu quer imprimir no arquivo strings, ou caracteres?
e o que tu quer dizer com:
"Bom, o que se vê é que necessito declarar os carácteres ascii para poder continuar"?

pra que uma tabela ASCII se tu só precisa imprimir a tecla pressionada, em um arquivo?
O primeiro code que eu lhe apresentei faz quase isso, como o do uilianries também; basta usar um pouco o cerebro.
Eu também não vejo a necessidade de usar o switch para isso, mas se tu quer fazer assim tudo bem...

Agora observe este mesmo code que eu postei antes, mas com uma ligeira modificação para que seja impresso strings no arquivo.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
FILE *filefd;
char *input = malloc(1*sizeof(char));
char output_file[16] = "/var/tmp/filefd";
char reject[] = "0123456789";
int aux=0;

if((filefd=fopen(output_file,"w"))==NULL)
{
fprintf(stderr,"unable to open file to write");
exit(1);
}
else
{
printf("Chose a caracter: ");
if(scanf("%[a-zA-Z]",input)==0 || strcspn(input,reject)==0){
fprintf(stderr,"invalid input\n");
exit(1);
}
for(aux=0;input[aux];aux++)
if(input[aux]) //ou if(input[aux]=='caractere')
{
fprintf(filefd,"%s\n",input); //imprime string já formatada no arquivo
printf("File wrote at: %s\n",output_file);
fclose(filefd);
break;
}
else
{
fprintf(stderr,"something goes wrong\n");
exit(1);
}
}
return 0;
}


Não tem muito mistério nisso, poste o seu code inteiro até agora para podermos ajudar com algo, de fato.
--
Just bring us some beers, and then we can talk about our systems. :)




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts