Declarações em C [RESOLVIDO]

13. Re: Declarações em C

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 12/08/2016 - 21:42h

Cristhoffer1994 escreveu:

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. :)


Por enquanto apenas caracteres mesmo. Em base no código do uilianries fiz isso:


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

int main(void)

{
FILE * file;
char log;

scanf("%c", &log);

if (!isalpha(log)) {
perror("error...");
return -1;
} while(1)

switch (log) {
case 'a':
file = fopen("teste.txt","a++");
fputs(log,file);
fclose(file);
break;
case 'b':
file = fopen("teste.txt","a++");
fputs(log,file);
fclose(file);
break;
default:
break;
}

return 0;
}

Dessa forma não consegui criar o arquivo... to lendo sobre as funções.

Sobre "usar o 'cerebro' ", eu faço isso todo dia. Faço Engenharia Florestal. Estudo o dia inteiro, programação não é um dos assuntos que analisamos, logo, meu conhecimento nessa parte tá em evolução. Ainda mais porque eu mesmo desenvolvo códigos pra alguns cálculos quando é necessário na faculdade. Achei meio 'baixo' dizer isso. Usar o 'cerebro'... ora, isso todos fazemos, o tempo todo. O que é certo é... basta explorar as funções.
E eu tratei eles com respeito, assim como estou te tratando, sendo sincero.

Enfim, peço desculpas. Pra todos.

Abraço.



  


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

Roberto
mrx6s0

(usa Ubuntu)

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

paulo1205 escreveu:

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.



Paulo, lhe peço desculpas, Às vezes podemos nos expressar de forma errônea, como foi o meu caso.

Apenas espero que aceite minhas desculpas, pois é de verdade.

Dei uma olhada em teus comentários, e tu realmente entende do assunto, então realmente mereci o 'puxão de orelha'.

Enfim, não preciso me explicar muito. Essas coisas acontecem.

Espero ter ficado tudo claro. Não gosto de ficar de 'mal' com ninguém, nem com quem eu nem conheço...


Abraço.


15. Re: Declarações em C

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 12/08/2016 - 22:15h

listeiro_037 escreveu:

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



Amigo, desculpe-me se fui grosseiro. Esse é um mal dos humanos, difícil evitar...

O que é fácil é pedir desculpas, e elas serem aceitas. Não acha?

E agora, peço desculpas a ti.

Sobre o programa:
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, sumirão, 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.


Espero ter ficado claro qual o objetivo do código.
E sim, for pode ser usado com switch, já vi alguns códigos ótimos utilizando-os dessa maneira.

Abraço.


16. Re: Declarações em C

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 12/08/2016 - 22:26h


#include <stdio.h>
#include <stdlib.h>

int main ()
{

FILE * pFile;
int sentence [4000]; // aumentando o tamanho do array [] aumenta os buffer cabíveis *//

keys:

fprintf("...",4000,sentence);

fgets (sentence,4000,stdin);

pFile = fopen ("log.txt","a");

fputs (sentence,pFile);

goto keys;

system("pause");

}


Esse foi o primeiro rascunho que eu fiz... me pergunto se há como registrar as teclas no arquivo estando fora do terminal. Esse código copia direto para um arquivo em texto, mas com a interação no terminal. E, visivelmente, é um código bem 'feio'. Rascunho mesmo. Escrevi no caderno primeiramente, até.

Fico grato com qualquer ajuda!




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

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 13/08/2016 - 07:30h

Cristhoffer1994 escreveu:

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. :)


Amigo, bom código. Não compilei ainda pois estou no meio de outras coisas, mas pelo que percebi, ele apenas escreve um caractere no arquivo?
Pelos parâmetros malloc(1*sizeof(char)); ?

Muito obrigado!

Abraço.


18. Re: Declarações em C

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 13/08/2016 - 07:34h

mrx6s0 escreveu:

Cristhoffer1994 escreveu:

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. :)


Amigo, bom código. Não compilei ainda pois estou no meio de outras coisas, mas pelo que percebi, ele apenas escreve um caractere no arquivo?
Pelos parâmetros malloc(1*sizeof(char)); ?

Muito obrigado!

Abraço.



E sobre a tabela ascii: apenas para desenvolver algo diferente mesmo. Por conhecimento.



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

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/08/2016 - 08:26h

mrx6s0 escreveu:

"Amigo, bom código. Não compilei ainda pois estou no meio de outras coisas, mas pelo que percebi, ele apenas escreve um caractere no arquivo?
Pelos parâmetros malloc(1*sizeof(char)); ?"


Não. Ele imprime uma cadeia de caracteres (string) no arquivo armazenado na váriavel "output_file".
Neste ultimo code "for" não faz sentido, mas eu o escrevi mesmo assim, caso você quisesse comparar input à apenas uma letra e imprimi-la, mas acho que acabei deixando as coisas mais confusas assim...

Observe o novo code comentado:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
FILE *filefd;
char *input = malloc(1*sizeof(char)); //Sempre uso malloc() em entradas de usuário que não tenho como saber a real quantidade de elementos necessários.
char output_file[16] = "/var/tmp/filefd"; //variável contendo string de local do arquivo
char reject[] = "0123456789";
int aux=0;

if((filefd=fopen(output_file,"w"))==NULL) //Se NULL, exit(1);
{
fprintf(stderr,"unable to open file to write");
exit(1);
}
else //Se chegou aqui, executa o restante do code.
{
printf("Chose a caracter: ");
if(scanf("%[a-zA-Z]",input)==0 || strcspn(input,reject)==0){ //Valida input, rejeita números.
fprintf(stderr,"invalid input\n");
exit(1);
}
for(aux=0;input[aux];aux++) //Varre váriavel input
//if(input)//Se input (sempre verdadeiro)
if(input[aux]=='a') //Se input == a
{
//fprintf(filefd,"%s\n",input); //imprime string sem numeros em output_file
fprintf(filefd,"%c\n",input[aux]); //imprime caracter em output_file
printf("File wrote at: %s\n",output_file);
fclose(filefd);
}
else
{
fprintf(stderr,"something goes wrong\n");
exit(1);
}
}
return 0;
}

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



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

Roberto
mrx6s0

(usa Ubuntu)

Enviado em 13/08/2016 - 08:52h

Cristhoffer1994 escreveu:

mrx6s0 escreveu:

"Amigo, bom código. Não compilei ainda pois estou no meio de outras coisas, mas pelo que percebi, ele apenas escreve um caractere no arquivo?
Pelos parâmetros malloc(1*sizeof(char)); ?"


Não. Ele imprime uma cadeia de caracteres (string) no arquivo armazenado na váriavel "output_file".
Neste ultimo code "for" não faz sentido, mas eu o escrevi mesmo assim, caso você quisesse comparar input à apenas uma letra e imprimi-la, mas acho que acabei deixando as coisas mais confusas assim...

Observe o novo code comentado:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
FILE *filefd;
char *input = malloc(1*sizeof(char)); //Sempre uso malloc() em entradas de usuário que não tenho como saber a real quantidade de elementos necessários.
char output_file[16] = "/var/tmp/filefd"; //variável contendo string de local do arquivo
char reject[] = "0123456789";
int aux=0;

if((filefd=fopen(output_file,"w"))==NULL) //Se NULL, exit(1);
{
fprintf(stderr,"unable to open file to write");
exit(1);
}
else //Se chegou aqui, executa o restante do code.
{
printf("Chose a caracter: ");
if(scanf("%[a-zA-Z]",input)==0 || strcspn(input,reject)==0){ //Valida input, rejeita números.
fprintf(stderr,"invalid input\n");
exit(1);
}
for(aux=0;input[aux];aux++) //Varre váriavel input
//if(input)//Se input (sempre verdadeiro)
if(input[aux]=='a') //Se input == a
{
//fprintf(filefd,"%s\n",input); //imprime string sem numeros em output_file
fprintf(filefd,"%c\n",input[aux]); //imprime caracter em output_file
printf("File wrote at: %s\n",output_file);
fclose(filefd);
}
else
{
fprintf(stderr,"something goes wrong\n");
exit(1);
}
}
return 0;
}

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


Esclarecedor, amigo! Agora já sei como seguir com o código!

E agora, para inverter, receber os números? Creio que seja só mudar alguns parâmetros.. certo?

Vai acabar virando um jogo 'meio japonês', pois pretendo exibir contas na tela também, com poucos segundos, e logo, digitar os números que apareceram.

Abraço.
Programação é Vida






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

Roberto
mrx6s0

(usa Ubuntu)

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

Como seria feita a incrementação de um loop while, ou até mesmo for? ou com label e goto?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)

{
FILE *filefd;
char *input = malloc(1*sizeof(char));
char output_file[5000] = "/home/mrx/keys.log";
char reject[] = "0123456789";
int aux=0;

if((filefd=fopen(output_file,"w"))==NULL)
{
fprintf(stderr,"unable to open file to write");
exit(1);

//* goto file:
//* or
//* while(1){ */
}
else
{

fprintf(filefd,input);
if(scanf("%[a-zA-Z]",input)==0 || strcspn(input,reject)==0) {
fprintf(stderr,"error...\n");
exit(1);
}

for(aux=0;input[aux];aux++)
if(input[aux]) // ou if(input[aux]=='caractere')

{
fprintf(filefd,"%s\n",input); //*imprime string no arquivo. */
fprintf(filefd,output_file);
fclose(filefd);
break;
default:
//* goto file;
}
else
{
fprintf(stderr,"error...\n");

}
}
return 0;
}


Só estou pensando alto. codando no celular, indo pra casa. hehehehe


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

Roberto
mrx6s0

(usa Ubuntu)

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

Seria interessante não aparecer os caracteres enquanto são digitados, para aumentar a dificuldade no jogo. Eu venho pesquisando, mas nao achei nada muito concreto.

Desculpa se eu estiver sendo 'evasivo'.

É apenas fome de conhecimento. hehe

Abraço.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts