Ir ao conteúdo
  • Cadastre-se

Algumas warnings.


primataprogramme

Posts recomendados

Boa noite!

Galera eu criei um post passado que não estava conseguindo fazer um programa de cadastro e login e consegui resolver meu problema graças a algumas informações.Só que ficaram algumas warnings para quem quiser ver a post passada esse é o URL:

http://http://forum.clubedohardware.com.br/help-algoritmo/1164364

Bom o código "Arrumado" ficou assim :

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <locale.h>

//função que pede ID e senha do usuario para cadstrar.

char usuario_cadastro();

//--------------------

//função que guarda a senha,usuario e opcão de menu.

char bancaria();//Não estou usando,e penso em fazer outra coisa com ela;

//---------------------------------------

//função usada para logar na sua conta.

char login (char ID_user_login[],char senha_user_login[]);

//------------------------------------

//função do menu.

char menu(char opcao[],char ID_user_login[],char senha_user_login[]);

//-------------------

int main(char ID_user[],char senha_user[])

{

char

opcao[11];

setlocale(LC_ALL,"Portuguese");

system(" clear || cls ");

do {

printf("\t\tDeseja se Cadastrar?\n");

printf("\t\tDigite Cadastro\n\n");

printf("\t\tDeseja Logar em sua conta?\n");

printf("\t\tDigite Logar\n\n");

printf("\t\tEncerrar \n\n");

printf("\t\tDigite Sair\n\n");

printf("\t\tDeseja voltar?\n");

printf("\t\tDigite Voltar.\n\n");

scanf(" %s",opcao);

}

while( (stricmp(opcao,"sair") == 0) && (stricmp(opcao,"sair") != 0) );

menu(opcao,ID_user,senha_user);

return(opcao,ID_user,senha_user);

}

//menu--------------------

char menu(char opcao[],char ID_user_login[],char senha_user_login[])

{

if (stricmp( opcao,"Sair") == 0)

{

printf("Até mais.\n");

}

else if (stricmp(opcao,"Cadastro") == 0)

{

usuario_cadastro();

}

else if (stricmp(opcao,"Logar") == 0)

{

login(ID_user_login,senha_user_login);

}

else if (stricmp(opcao,"Voltar") == 0)

{

main(ID_user_login,senha_user_login);

}

else

{

printf("Opcão inválida,tente novamente.\n\n");

system("PAUSE");

main(ID_user_login,senha_user_login);

}

return(ID_user_login,senha_user_login);

}

//------------------------------------

//Função que cadstra senha e ID ---------------

char usuario_cadastro()

{

char

ID_user[16],

senha_user[10];

system("clear || cls");

printf("Digite um nome de usuário para sua conta de no maximo 15 digitos.\n");

scanf("%s",ID_user);

printf("Digite uma senha de no maximo 9 digitos.\n");

scanf("%s",senha_user);

printf("Cadastro efetuado com sucesso.\n");

main(ID_user,senha_user);

return(ID_user,senha_user);

}

//----------------------------------------------------

//Função que guarda senha e o usuário;

/*char usuario (char ID_user[], char senha_user[])

{

char

ID_user_login[] = ID_user,

senha_user_login[] = senhar_user;

return(ID_user_login,senha_user_login);

}*/

char login(char ID_user_login[],char senha_user_login[])

{

char

password[10],

user[16];

do

{

system("clear || cls");

printf("Digite seu ID: \n");

scanf("%s",user);

printf("Digite sua senha: \n");

scanf("%s",password);

if ( (stricmp(user,ID_user_login) == 0) && (stricmp(password,senha_user_login) == 0) )

{

printf("Você está logado em sua conta.\n");

}

else

{

printf("Seus dados estão incorretos.\n");

system("PAUSE");

}

}while( (strcmp(user,ID_user_login) != 0) && (stricmp(password,senha_user_login) != 0) );

}

Está funcionando bem,deve estar com bugs e tal,mas funciona.

Mas ficam esses três warning aqui:

In function 'main':

warning: return makes a integer from pointer without a cast

In function 'menu':

warning: return makes a integer from pointer without a cast

In function 'usuario_cadastro':

warning: return makes a integer from pointer without a cast

Gostaria muito de saber a razão deles,e como resolver-los .

Grato desde já!

Obrigado.

Link para o comentário
Compartilhar em outros sites

Amigo Primata,

O problema são esses retornos que você está fazendo:

return(opcao,ID_user,senha_user);
return(ID_user_login,senha_user_login);
return(ID_user,senha_user);

Vou sugerir uma leitura introdutória sobre C; creio que valha a pena, pois você vai entender melhor a sintaxe de linguagem.

Este curso da UFMG é clássico e cobre tudo isso aí que você está fazendo no seu programa:

http://www.inf.ufsc.br/~fernando/ine5412/C_UFMG.pdf

LNW

Link para o comentário
Compartilhar em outros sites

Amigo Primata,

O problema são esses retornos que você está fazendo:

return(opcao,ID_user,senha_user);
return(ID_user_login,senha_user_login);
return(ID_user,senha_user);

Vou sugerir uma leitura introdutória sobre C; creio que valha a pena, pois você vai entender melhor a sintaxe de linguagem.

Este curso da UFMG é clássico e cobre tudo isso aí que você está fazendo no seu programa:

http://www.inf.ufsc.br/~fernando/ine5412/C_UFMG.pdf

LNW

Obrigado caro amigo! Vou ler sim!

Mas antes disso , pode esclarecer uma dúvida minha?

Tipow eu fiz esses diversos retornos , por que se não,não conseguiria invocar as funções dentro do "main" e "menu" então joguei a senha e login tudo dentro da "main" depois joguei tudo na "menu" aproveitando que eu já invocava ela dentro da main e passava-lhe o vetor opcao.

Há como eu passar valores para uma função sem ser no retorno?Há como eu invocar uma função sem precisar jogar parâmetros,variáveis e valores nelas?

Obrigado pela dica de apostila estava precisando mesmo,ser auto didata não é fácil não! #partiu ler.:D

Link para o comentário
Compartilhar em outros sites

Primata,

Há como eu passar valores para uma função sem ser no retorno?Há como eu invocar uma função sem precisar jogar parâmetros,variáveis e valores nelas?

Basta notar na própria função stricmp que você usou no seu programa. Você passou dois argumentos e depois testa o retorno (testando se é igual a zero).

Mas realmente é fundamental a leitura, todas essas dúvidas e outras serão prontamente esclarecidas (como criar funções, retornar ou não valores, etc.). Agora, é para ler mesmo. :) Vá praticando os exemplos que você vai pegar o jeito da coisa.

E melhoras, soube que estava doente, creio que já esteja 100%. ;)

Abraço,

:natal:

LNW

Link para o comentário
Compartilhar em outros sites

Primata,

Basta notar na própria função stricmp que você usou no seu programa. Você passou dois argumentos e depois testa o retorno (testando se é igual a zero).

Mas realmente é fundamental a leitura, todas essas dúvidas e outras serão prontamente esclarecidas (como criar funções, retornar ou não valores, etc.). Agora, é para ler mesmo. :) Vá praticando os exemplos que você vai pegar o jeito da coisa.

E melhoras, soube que estava doente, creio que já esteja 100%. ;)

Abraço,

:natal:

LNW

Ok brother! Já comecei a ler e realmente a apostila é muito boa,obrigado novamente por me recomenda-la ,estudar muito! E sim já estou 100% graças a deus obrigado pela preocupação,é nóis ^-^.

Link para o comentário
Compartilhar em outros sites

É porque você cometeu um "erro" até que interessante.

O return só aceita um valor, é uma característica da linguagem.

O fato de você ter colocado 3 valores separados com vírgula, fez com que o compilador entendesse que você usou o operador vírgula (altamente sinistro e pouco usado, a não ser em declarações).

Depois de resolvido a expressão o resultado dela, um ponteiro char, está sendo retornado como int sem que você comprove a sua intenção (fazendo cast).

Seu exemplo demonstra claramente os perigos do compilador C e como devemos seguir um certo padrão e possuirmos uma certa compreensão para não adentrarmos no Twilight zone.

Fica aí o porquê e realmente leia a apostila e se um dia quiser ser Master of Universe, leia o livro: C Programming Language (2nd Edition) escrito em 88 famoso até hoje.

Link para o comentário
Compartilhar em outros sites

Fica aí o porquê e realmente leia a apostila e se um dia quiser ser Master of Universe, leia o livro: C Programming Language (2nd Edition) escrito em 88 famoso até hoje.

Já estou lendo a apostila sim , eu baixei a terceira edição por herbert schildt em PDF e estou começando a ler,mas vou atrás dessa agora mesmo! Tomará que tenha pela net :D , eu só fico indignado pelo fato de uma função poder retornar apenas um valor :mellow:!! No mesmo exemplo da função "usuario_cadastro" eu tenho duas strings a se passarem,se eu puder passa apenas uma não ia dar certo,já até tentei antes de fazer a função usuario_cadastro fazer uma função que pedia o "ID_user" dps uma que pedia o "senha_user" , mas por serem duas funções diferentes não sei passar duas variáveis de funções distintas para uma função em comum .

Link para o comentário
Compartilhar em outros sites

Fica aí o porquê e realmente leia a apostila e se um dia quiser ser Master of Universe, leia o livro: C Programming Language (2nd Edition) escrito em 88 famoso até hoje.

Já estou lendo a apostila sim , eu baixei a terceira edição por herbert schildt em PDF e estou começando a ler,mas vou atrás dessa agora mesmo! Tomará que tenha pela net :D , eu só fico indignado pelo fato de uma função poder retornar apenas um valor :mellow:!! No mesmo exemplo da função "usuario_cadastro" eu tenho duas strings a se passarem,se eu puder passa apenas uma não ia dar certo,já até tentei antes de fazer a função usuario_cadastro fazer uma função que pedia o "ID_user" dps uma que pedia o "senha_user" , mas por serem duas funções diferentes não sei passar duas variáveis de funções distintas para uma função em comum .

Link para o comentário
Compartilhar em outros sites

Já estou lendo a apostila sim , eu baixei a terceira edição por herbert schildt em PDF e estou começando a ler,mas vou atrás dessa agora mesmo! Tomará que tenha pela net :D , eu só fico indignado pelo fato de uma função poder retornar apenas um valor :mellow:!! No mesmo exemplo da função "usuario_cadastro" eu tenho duas strings a se passarem,se eu puder passa apenas uma não ia dar certo,já até tentei antes de fazer a função usuario_cadastro fazer uma função que pedia o "ID_user" dps uma que pedia o "senha_user" , mas por serem duas funções diferentes não sei passar duas variáveis de funções distintas para uma função em comum .

Mais uma vez obrigado por levantar essa bola, já faz tempo que quero tocar nesse assunto.

Você usam a ferramenta errada para o serviço.

C não foi criado para fazer cadastros ou programas de alto nível. C é usado, principalmente hoje em dia, para programação de baixo nível (hardware).

Existem diversas alternativas: Python, Ruby, Erlang, C#, VB.net, Java, C++, Objective-C, Lua, Javascript etc...

Ou seja, C nem Orientação a Objetos tem, ZERO abstração. É uma linguagem para quem precisa ficar muito próximo do hardware, mas ao mesmo tempo não quer mexer com assembly.

Pra finalizar, a main é o ponto de entrada do programa, ela tem restrições porque é reservada para o sistema e não para o usuário. O programador deveria usar a MAIN apenas para chamar suas funções e dar inicio ao programa.

Espero que esse post seja lido por muitos iniciantes que se empolgam com os primeiros anos da faculdade e param de seguir em frente, existem linguagens muito melhores para os objetivos que procuram.

NA PIOR HIPÓTESE, o C++ é muito mais indicado do que o C.

Você deveria querer usar C se está mexendo com eletrônica ou criando/dando manutenção em um sistema operacional.

Link para o comentário
Compartilhar em outros sites

Já estou lendo a apostila sim , eu baixei a terceira edição por herbert schildt em PDF e estou começando a ler,mas vou atrás dessa agora mesmo! Tomará que tenha pela net :D , eu só fico indignado pelo fato de uma função poder retornar apenas um valor :mellow:!! No mesmo exemplo da função "usuario_cadastro" eu tenho duas strings a se passarem,se eu puder passa apenas uma não ia dar certo,já até tentei antes de fazer a função usuario_cadastro fazer uma função que pedia o "ID_user" dps uma que pedia o "senha_user" , mas por serem duas funções diferentes não sei passar duas variáveis de funções distintas para uma função em comum .

Mais uma vez obrigado por levantar essa bola, já faz tempo que quero tocar nesse assunto.

Você usam a ferramenta errada para o serviço.

C não foi criado para fazer cadastros ou programas de alto nível. C é usado, principalmente hoje em dia, para programação de baixo nível (hardware).

Existem diversas alternativas: Python, Ruby, Erlang, C#, VB.net, Java, C++, Objective-C, Lua, Javascript etc...

Ou seja, C nem Orientação a Objetos tem, ZERO abstração. É uma linguagem para quem precisa ficar muito próximo do hardware, mas ao mesmo tempo não quer mexer com assembly.

Pra finalizar, a main é o ponto de entrada do programa, ela tem restrições porque é reservada para o sistema e não para o usuário. O programador deveria usar a MAIN apenas para chamar suas funções e dar inicio ao programa.

Espero que esse post seja lido por muitos iniciantes que se empolgam com os primeiros anos da faculdade e param de seguir em frente, existem linguagens muito melhores para os objetivos que procuram.

NA PIOR HIPÓTESE, o C++ é muito mais indicado do que o C.

Você deveria querer usar C se está mexendo com eletrônica ou criando/dando manutenção em um sistema operacional.

Link para o comentário
Compartilhar em outros sites

Espero que esse post seja lido por muitos iniciantes que se empolgam com os primeiros anos da faculdade e param de seguir em frente, existem linguagens muito melhores para os objetivos que procuram.

NA PIOR HIPÓTESE, o C++ é muito mais indicado do que o C.

Você deveria querer usar C se está mexendo com eletrônica ou criando/dando manutenção em um sistema operacional.

Eu já sabia que C era considerado por muitos,de baixo/médio nível agora entendo o por que! Eu estava considerando C como uma linguagem de Alto nível por que só estava mexendo com ela com aplicações de Alto nível,não muito abstrata.Realmente subestimei muito a linguagem C,mas ao mesmo tempo,quando eu quis fazer esse programa em C era por que eu queria botar em prática o que eu tinha aprendido até então.Deu certo tanto que o programa ficou bem "funcional" mas ta feio,tem warning qualquer coisinha ele "quebra" . E você realmente com esse comentário abriu meus olhos.Eu achei que tendo noção nas linguagens de alto nível poderia vir pro C sabendo algo,mas vi que não... C é muito diferente.Esquema agora é estudar uitas apostila e ir pegando muitos exercícios !

Link para o comentário
Compartilhar em outros sites

Espero que esse post seja lido por muitos iniciantes que se empolgam com os primeiros anos da faculdade e param de seguir em frente, existem linguagens muito melhores para os objetivos que procuram.

NA PIOR HIPÓTESE, o C++ é muito mais indicado do que o C.

Você deveria querer usar C se está mexendo com eletrônica ou criando/dando manutenção em um sistema operacional.

Eu já sabia que C era considerado por muitos,de baixo/médio nível agora entendo o por que! Eu estava considerando C como uma linguagem de Alto nível por que só estava mexendo com ela com aplicações de Alto nível,não muito abstrata.Realmente subestimei muito a linguagem C,mas ao mesmo tempo,quando eu quis fazer esse programa em C era por que eu queria botar em prática o que eu tinha aprendido até então.Deu certo tanto que o programa ficou bem "funcional" mas ta feio,tem warning qualquer coisinha ele "quebra" . E você realmente com esse comentário abriu meus olhos.Eu achei que tendo noção nas linguagens de alto nível poderia vir pro C sabendo algo,mas vi que não... C é muito diferente.Esquema agora é estudar uitas apostila e ir pegando muitos exercícios !

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...