Ir ao conteúdo
  • Cadastre-se

FelipePetropolis

Membro Pleno
  • Posts

    41
  • Cadastrado em

  • Última visita

Tudo que FelipePetropolis postou

  1. Olá! Oi de novo Zennon . . . Bom é exatamente o que disseram MassakiMsk e CiroboyBR apenas complementando . . . - Os cinco alertas seguintes são relativos ao fato de você ter colocado “ & ” para as suas variáveis dentro do printf(); o que não é necessário: |16|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| |23|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| |30|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| |38|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| |45|warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]| - Os dois alertas seguintes estão lhe alertando para o fato de você não ter definido o tipo da função main() |4|warning: return type defaults to ‘int’ [-Wreturn-type]| como você não definiu o tipo, o compilador tomou a liberdade de o definir como sendo “ int ” |51|warning: control reaches end of non-void function [-Wreturn-type]| como a função main(), foi definida como sendo do tipo “ int ” ela deve retornar algum valor, sendo assim você deve colocar um valor de retorno antes da ultima chave de fechamento da função main(): int main() { . . . return 0; } - Este é o seu principal problema, e é exatamente o que nos e o alerta queremos lhe dizer |8|warning: ‘codigo’ is used uninitialized in this function [-Wuninitialized]| O alerta está lhe alertando que a variável “ código ” está sendo utilizada no código sem que antes ela fosse inicializada com algum valor, para evitar usar o lixo de memoria. Mas especificamente, está mensagem esta associada ao fato de que quando você vai utilizar uma variável, em uma estrutura de controle, como: if for while switch É sempre bom você definir um valor ( inicializar ) a variável com um valor nulo para evitar que a mesma use lixo de memoria, dados ( valores ) armazenados naquela porção de memoria e que não foi apagado. E é exatamente esse o motivo para o seu programa pular direto para o default, já que o valor é diferente de qualquer case dentro do switch, tente colocar um printf(), antes do switch para mostrar o valor que está sendo armazenado pela variável “ código ” Bom era isso . . tente seguinr as dicas postadas acima por todos nós e o codigo vai rodar liso . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  2. Olá! Olha sou inciante em C . . . Cara ate entendo o que você quer fazer, mas pelo que sei o jeito mais seguro, se não o ÚNICO é utilizando um vetor dinamicamente alocado, tente dar uma pesquisada sobre isso, se possível tento postar tópicos que já vi aqui mesmo no fórum que tratam sobre esse assunto . . . Mas Tenho algumas duvidas, não quero passar a ideia de prepotencia ou arrogancia, mas . . .: - onde você leu ou aprendeu que definindo uma variável como: int magica [ 0 ]; a mesma iria armazenar uma quantidade infinita de números? - sobre a sua citação: E testando ele funcionou, ele armazena infinitamente, se eu armazenar algo no mágica [191629] ele vai armazenar Existem uma serie de fatores que podem contribuir para o sucesso ou o fracasso dessa sua afirmação, mas você poderia ter a gentileza de nos dizer se você realmente testou essa sua hipotipose, principalmente atribuindo valores a CADA posição do vetor: criando uma variável como: int magica [ 0 ]; e colocando um valor em: magica [ 191629 ]; ele vai armazenar ! ! ! Essa duvida me veio atona porque sabendo como a linguagem c funciona e fazendo um pequeno teste aqui para a sua hipótese, atribuindo um valor numérico a CADA posição, em determinado momento recebi uma mensagem de falha de segmentação de memoria, normalmente associado a tentativa de acessar partes da memoria não alocados para o meu algoritmo. Apenas lembrando que dependendo de uma conjectura de fatores da sua maquina, envolvendo: # o compilador e a forma como o mesmo está configurado; # o tamanho da memoria que você possui na sua maquina; # a quantidade de programas em execução; # e a forma como o sistema operacional esta usando e redistribuindo os recursos de memoria da maquina; As chances de você receber alguma mensagem de ERRO, são no mínimo enormes, pois aqui nem com 50 números, consigo executar o algoritmo sem receber a mensagem de falha de segmentação de memoria ! ! ! ! ! Bom por hora é isso . . . tente buscar informações sobre vetores dinamicamnete alocados que certamente funcionarão para o que você quer fazer, e nos diga se com os testes que lhe pedi você não recebeu nenhuma mensagem de erro do seu programa. E como eu já disse tente buscar no fórum Tópicos sobre esse assunto, se possivel tento postar algo ainda hoje! Obervações: - Tente postar qualquer mensagem de erro ou alerta que o compilador ou a IDE lhe retornem, ou mesmo qualquer mensagem ao final de execução do seu programa. - Aqui o algoritmo parace estar funcionando, pois, o numero 2 é printado na tela . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  3. Opa! Apenas algumas observações e correções adicionais . . . - Na parte relativa ao intervalo que eu codifiquei o correto seria: if ( valor >= 0 && valor <= 100 ) - E com relação ao erro no sinal de avaliação de valores em expressões: || - é usado para avaliar dois valores onde se apenas um deles for verdadeiro, a expressão inteira se tornará verdadeira, sendo este o motivo para o primeiro if ser sempre executado, pois, um dos valores sempre é verdadeiro, se entrarmos com os valores apropriados, para o algoritmo! && - é usado para avaliar dois valores, onde os dois tem de ser verdadeiros para que a expressão inteira se torne verdadeira, caso um dos dois não seja verdadeiro, a expressão inteira se tornará falsa! Era só isso . . .
  4. Olá! Olha sou iniciante em C, mas já tive um problema similar no inicio de meus estudos . . . - acho que você fez confusão com os sinais que são usados para a avaliação de valores, você colocou ( || ) quando acredito que o correto seja ( && ), quando fiz alguns testes aqui apenas o ( && ) apresentou o comportamento certo. |13|error: expected ‘}’ before ‘else’| - ao que me parece o erro está lhe dizendo que está faltando uma chave de fechamento para o if anterior ao ELSE |29|error: expected identifier or ‘(’ before ‘else’| - este erro parece estar associado ao momento em que consertei o erro da linha 13, acho que pelo que pude entender da logica do seu algoritmo você queria um if inicial que fizesse uma avaliação inicial que avaliasse se a variável está fora de uma valor especifico: if ( valor > 0 && valor < 100 ) { . . . } else printf ( "\nFora de intervalo\n" ); colocando o restante dos seus ifs aqui dentro com o correto sinal de avaliacao, o programa apresentou o comportamento que acredito que seja o esperado por voce. - tambem faltou definir o tipo da função main() bem como colocar um return 0; antes da ultima chave de fechamento da funcao main(), pois, aqui o programa retornou alertas sobre os mesmos. Bom por hora é só . . . Veja se as dicas acima lhe ajudam . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  5. Olá! Bom pelo que vi você cometeu alguns pequenos, porém, importantes erros . . . |9|warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ aqui o alerta está lhe dizendo que o código de formatação é incompatível com o tipo da variável que você deseja usar, neste caso você só precisa colocar o código de formatação certo “ %s ” muito provavelmente você vai receber este outro alerta, após colocar o código de formatação certo: |13|warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ isso ocorre porque em uma cadeia de caracteres ( string ) não é necessário a utilização de “ & ” dentro de um scanf(). - Outra coisa que pode estar causando o problema é o fato de que em funções para a entrada de dados, como scanf(), o buffer usado para armazenar os dados que entraram tem a tendencia de deixar o ultimo caractere armazenado no buffer, sendo que na maior parte das vezes o caractere será o “ \n ” ( pula linha ), sendo assim no scanf() seguinte o “ \n ” será usado finalizando assim a entrada de dados, não permitindo ao usuário entrar com os dados corretos. * Uma das forma que você pode usar para evitar este problema é usando dentro dos seus scanf() um código de formatação que realizada a limpeza do buffer do teclado, um dos que existem é o %*c, colocado logo apos o codigo convencional neste caso " %s " * Outra forma é utilizando funções que realizem a tarefa, para o Linux e Windows você pode tentar usar a função getchar(); não é sempre que ela funciona mas dependendo da ocasião pode quebrar uma galho. Para o Linux você pode usar __fpurge ( stdin ); Como não tenho muito conhecimento nesta parte voce deixar para voce buscar a melhor função para os seus algoritmos . . . OBS: para os sistemas Windows e Linux você muito provavelmente vai encontrar a função fflush ( stdin ); NÃO a use, ela é uma função que não foi desenvolvida especificamente para está tarefa e costuma ter um comportamento indefinido, podendo causar problemas durante a sua utilização. - |28|warning: format ‘%c’ expects argument of type ‘int’, but argument 3 has type ‘char *’ aqui este alerta está lhe alertando para o fato de que o código de formatação " %c " não é compativel com o tipo da variável “ palavra ” que neste caso é uma string, é só colocar o código de formatação certo “ %s ” e o alerta seguinte é o principal problema: |22|warning: comparison between pointer and integer [enabled by default]| ele ocorre porque não linguagem C você não pode fazer a comparação direta entre uma variável do tipo string e um caractere, como você tentou fazer. Neste caso você deve alterar o código: for ( i = 0; i < 5; i++ ) { if ( palavra == caractere ) { quantidade = 1 + quantidade; } } por: for ( i = 0; i < 5; i++ ) { if ( palavra [ 0 ] == caractere ) { quantidade = 1 + quantidade; } } Bom por hora era só isso . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  6. Olá! Oi, sou inciante em C, sem contar que por hora estou parado na linguagem, mas a alguns meses atrás quando mais ativo busquei uma serie de links que talvez me pudessem ser uteis no futuro . . . Bom a maior parte dos links nada mais vai ser do que mais do mais do que você provavelmente já sabe, além de que a maioria esmagadora é em inglês, mas de todo modo: Este é um dos que acho mais bem detalhados ao meu ver, fala o que acredito ser o mais próximo do que você já sabe, sem contar que tem uma referencia no final da pagina sobre os principais comandos e funções da biblioteca: https://computing.llnl.gov/tutorials/pthreads/ Este link em inglês traz uma breve explicação básica sobre pthreads, porém possui no final da pagina algumas descrições básicas sobre alguns dos comandos e funções da biblioteca: http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html Este Link é a mesma coisa, usando inclusive como referencia os links de descrição de comandos e funções do link anterior: http://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html Também tem este link que possui dois PDFs, o primeiro é em português enquanto que o segundo em Inglês: http://www.cin.ufpe.br/~rngs/Arquivos/pthreads/ Obs.: apenas atente para o fato de que não tenho certeza se os links que lhe passei acima podem ser uteis para o sistema que você usa, mas de todo modo acho que lhe dá alguma luz. Bom por hora é só, apenas lembrando que sou inciante em C, não tenho nenhum conhecimento sobre threads e que estou parado a algum tempo . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  7. Olá! Olha sou inciante em programação, e principalmente em Python, então muito provavelmente vou dizer algo errado . . . Já me aconteceu algo parecido a algumas semanas, pela busca que fiz, o erro: unsupported operand type(s) for *: 'int' and 'NoneType' Parece estar sendo causado pelo uso da função print() na variável ( dias ), o que acho que esta acontecendo é que: - você declara uma variável chamada dias, e atribui a ela o seguinte comando: print ( str ( input ( "Digite o número de dias no hotel" ) ) ) - primeiro, essa linha vai fazer é chamar a função input(), para receber um valor introduzido pelo teclado, neste caso do tipo string, sendo assim o tipo da variável dias, assim que ela receber o valor de retorno da função input() vai ser do tipo string - segundo, ao vai ser receber o valor de retorno da função int(), a qual foi usada para converter o valor de string para o tipo inteiro, nesse momento o tipo da variável dias vai mudar do tipo ( string ) para o tipo ( int ) - terceiro e ultimo, a variável dias vai receber o valor de retorno da função print(), e esse é o seu problema, a função print() é uma função que não retorna nenhum valor, ou seja ela é um objeto cujo tipo é ( NoneType ), sendo assim neste momento o tipo da variável dias vai mudar do tipo ( inteiro ) para o tipo ( NoneType ), que não possui nenhum valor É isso que que está causando a mensagem de erro: pois, quando você chama a sua função hotel(), passa para ela o valor da variável (dias) que tem como valor ( NoneType ), isso é completamente permitido, pela sintaxe da linguagem Python, mas quando você esta tenta realizar a operação de multiplicação, entre um valor inteiro e um valor do tipo NoneType, é retornado um erro pela tentativa de realizar uma operação que não é permitida ( suportada ) Ate onde pude estudar de Python você só precisa, mudar a linha para: dias = int ( input ( "Digite o número de dias no hotel" ) ) - alias você usou str() para a conversão, quando o apropriado seria int(), digo apropriado, pois, ela ate é passada corretamente para a sua função, mas quando o valor fosse ser exibido, o numero 3 seria impresso 140 vezes, isso é uma característica de Python, por isso o apropriado seria o valor ser do tipo int Bom por hora é só . . . Veja se as dicas acima lhe ajudam . . . Ubuntu 14.04 Python 3.4.3 Espero Ter Ajudado ! ! !
  8. Apenas uma correção: Realmente o código de formatação ” %2s “ parece limitar o numero máximo de caracteres que a função scanf() pode ler da string, ou seja, char nome [ 6 ]; scanf ( "%6s", nome ); entrada: alexandre print ( "%s", nome ); saida: alexan No código acima apenas os 6 primeiras letras do nome serão exibidas na tela, porque o o código de formatação força a função scanf(); parar de ler tudo o que vier depois do numero especificado de caracteres a serem lidos. Caso contrario, o programa poderia apresentar problemas ao chegar nesta parte, caso a quantidade de caracteres passados seja maior do que a capacidade de armazenamento da variável. E como aconteceu aqui quando testei, o Compilador e a IDE podem não apresentar qualquer mensagem de Alerta ou Erro, ficando assim a supressa no momento de execução do programa. Eu quase deixei esse detalhe passar . . . Obs.: mas o que eu e o Math.Pi lhe dissemos, ainda conta . . . é sempre bom definir bem como a(s) sua(s) variáveis vão funcionar . . . Pois, caso você queria testar com a dica do Math.Pi, da forma como está o seu código, tecnicamente ele está correto, apenas dentro dos IFs é que você vai ter de colocar uma função para fazer a comparação entre strings. Caso você queira fazer do jeito que lhe expliquei, você pode fazer a comparação de forma direta, bastando para isso seguir as dicas que já lhe disse no post anterior . . . Ate a Próxima ! ! !
  9. Olá! Sou iniciante em C, mas acho que posso lhe ajudar . . . Ate onde sei o tipo char pode ser usado de duas maneiras: - Na representação de um único caractere char carta; você está declarando uma variável de nome carta que irá receber um único caractere - Na representação de uma cadeia de caracteres ( string ) char carta [ 3 ]; Você está declarando uma variável de nome carta que irá receber uma cadeia de caracteres ( string ), onde uma string pode ser uma única palavra ou mesmo uma frase e ate mesmo um texto inteiro, necessitando para isso que o tamanho seja grande o bastante para armazenar todos os caracteres, quanto maior a string maior vai ser o valor de dentro de char nome [ . . . ]; - nesta parte do código não sei para que serve a o código de formatação “ %2s ”, mas a não ser que ele sirva para ler apenas o primeiro caractere, será completamente inútil se você quer ler apenas um único caractere. scanf("%2s", carta); onde o código correto para ler um único caractere seria: scanf ( "%c", &carta ); - aqui acho que você cometeu um equivoco: if ( carta == "r") { valor = 10; } Quando você quer atribuir ou especificar a leitrua ou comparação de um valor do tipo “ char ”, existe diferença entre usar aspas simples e aspas duplas: - As aspas simples são usadas para a trabalharem em conjunto com caracteres únicos ( 1 ) char nome; sendo assim dentro do if você pode fazer a comparação direta entre o valor de uma variável do tipo char nome; e um valor qualquer desejado, sendo para isso necessário que o valor seja um único caractere e que o mesmo esteja entre aspas simples: if ( carta == 'r') { valor = 10; } - As aspas duplas são usadas para a representação de strings char nome [ 3 ]; Sendo assim, a instrução abaixo ate pode funcionar, mas dependendo do caso poderia causar erros de tempo de execução que são muito difíceis de serem detectados: if ( carta == "r" ) { valor = 10; } e que poderia retornar a(s) seguinte(s) mensagem(ns) de alerta dependendo do seu Compilador e da sua IDE, só não vou explicar isso agora por falta de tempo: |14|warning: comparison between pointer and integer [enabled by default]| |14|warning: comparison with string literal results in unspecified behavior [-Waddress]| Sendo assim o que o usuário Math.PI disse é apropriado caso no futuro você queira fazer a comparação de uma string especifica com o valor de outra string armazenada na variável alvo. - Além disso a atribuição de valores dentro dos seus IFs todas resultam em 10, quando o correto seria que cada IFs atribua um valor diferente, claro que isso vai depender do que o código deve fazer. - Na instrução: printf ( "\n %i", valor ); não sei detalhes sobre todos os usos de todos os códigos de formatação capazes de serem utilizadas em conjunto com printf(), mas para o tipo int o mais apropriado seria utilizar o código %d Bom por hora é só . . veja se as dicas lhe ajudam . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  10. Olá! Olha eu sou novo no mundo da Programação e comecei a poucos dias em Python, então não espere muito . . . Alguns dias atrás eu tive o mesmo problema, pela pesquisa simples e rápida que fiz, parece que a partir da versão 3 da linguagem Python o raw_input(), foi alterado para apenas input(), ou seja raw_input(), não existe no python3, por isso o erro: NameError: name 'raw_input' is not defined tente por apenas: nome = input("Qual seu nome? \n") Aqui no Python 3.4.3 (default, Oct 14 2015, 20:33:09), funcionou normalmente. - Sem querer ser prepotente ou mesmo rude, você deve estar lendo alguma documentação, livro ou apostila, baseados na versão Python 2, sendo assim se você quiser usar raw_input(), muito provavelmente você vai ter de usar a versão 2 do Python. É bom você dar uma pesquisada sobre as diferença, vantagens e desvantagens de usar cada versão de Python, seja ela a 2 ou a 3, no meu caso eu preferi começar por Python 2.7.6, para depois passar para Python 3. E se você ler o meu Tópico que postei a alguns dias, você vai perceber que escolher uma versão ou outra de Python pode ser uma experiencia agradável ou desagradável, dependendo das Características e modificações de cada versão de Python ! ! ! Mas é claro que isso depende de cada pessoa . . . Bom por hora é só . . . só para terminar, se você tiver um tempinho ou mesmo souber inglês, ou acesso a um tradutor online, você pode dar uma olhada neste link: Documentação Python 3 - raw_input() to input() ,que fala um pouco das motivações que levaram a esta mudança . . . Ubuntu 14.04 Python 2.7.6 Espero Ter Ajudado ! ! !
  11. Olá! Meu nome é Felipe, sou iniciante no mundo Linux e comecei a estudar Python 2.7.6 a pouco tempo quando me surgiu um problema: Há cerca de uns 2 dias atrás, eu estava usando o ambiente interativo só para praticar mesmo, quando tentei executar este pequeno código: - quando tentei comparar uma letra acentuada de uma variável o resultado estava dando sempre “ False ” >>> palavra = "página" >>> palavra [ 1 ] == "á" >>> False - quando dei um print do conteúdo da variável, ela foi exibida normalmente na tela. >>> palavra = "página" >>> print palavra >>> página - e quando tentei exibir a variável, para saber como o seu valor estava sendo armazenado, saiu isto: >>> palavra = “página” >>> palavra >>> 'p\xc3\xa1gina' Ate ai tudo bem, não me assustei, eu já havia ouvido falar que Python 2.7.6 tinha alguns detalhes relativos a codificação que poderiam causar este tipo de problema, na hora eu não me preocupei, deixei isso de lado por hora e fui terminar alguns outros testes que eu precisava fazer. porém, ontem quando tentei buscar soluções para esse problema, eu basicamente não consegui resolvê-lo, eu busquei em tudo quanto é lugar informações que pudesse me ajudar, mas nada adiantou. O que eu encontrei principalmente dizia para alterar a codificação na qual o arquivo fonte seria salvo, introduzindo no código a codificação a ser usada: #!/usr/bin/python # -*- coding: latin-1 -*- # coding: latin-1 # -*- coding: utf-8 -*- # coding: utf-8 # -*- coding: iso-8859-1 -*- # coding: iso-8859-1 - eu já tentei usar quase que todas as codificações que pude encontrar em uma serie de combinações diferentes e nada, o problema permanece - eu tentei editar o fonte em diferentes editores de texto e tentando alterar a codificação em que o arquivo seria salvo, e também nada - eu entrei nas opções do IDLE do Python 2.7.6 e lá na opção Default Source Encoding – está marcada UTF-8, e mesmo alterando para outras o problema permanece - encontrei em alguns sites, sobre usar .enconde() e .decode() para codificar e decodificar, não sei exatamente para que isso funciona, foi mesmo o desespero batendo a porta, e sai isso: >>> palavra = "página" >>> palavra >>> 'p\xc3\xa1gina' >>> palavra.encode("utf-8") Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> palavra.encode("utf-8") UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) mas, quando tento codificar a variável sem que está contenha um caractere especial, pelo menos não é apresentado nenhum erro >>> palavra = "Marcos" >>> palavra >>> 'Marcos' >>> palavra.encode("utf-8") >>> Bom por hora é isso, se alguém souber o que pode estar acontecendo estou aguardando . . . Observações: - o problema acontece tanto em modo interativo quanto no modo de edição - não tenho o Windows instalado para ver se o mesmo acontece na versão Windows, pois, alguns anos atrás quando arranhei um pouco de Python o mesmo problema aconteceu, mas a mudança de codificação resolveu o problema. O que não ocorre agora com o meu Linux - tentei usar diferentes IDEs – Ninja IDE, Wing IDE free, e nada também - baixei e instalei a IDLE do Python 3.4.3 mas aqui o problema dos acentos nem chega a ocorrer, muito provavelmente porque foi corrigido nesta versão do Python, eu ate poderia mudar para o Python 3, mas quero continuar um pouco mais no Python 2, antes de ir para o Python 3, além disso alguns programas e/ou bibliotecas ( principalmente a de Terceiros ) existentes no 2 podem não ser completamente compatíveis com o 3. - fora o que já mencionei acima, por ser iniciante tanto no mundo Linux quanto em programação ( Python ), não busquei ainda qualquer informação e/ou dicas sobre o sistema operacional que pudesse estar causando este problema, principalmente para não piorar a situação - se tiverem algum link, que acharem que possa me ajudar de alguma forma, seja para este problema em especial ou qualquer outro assunto, podem passar que tão logo quanto possível estarei dando uma olhada Ubuntu 14.04 LTS - 32 bit - Python 2.7.6 IDLE - Python 2.7.6 (default, Jun 22 2015, 18:00:18) [GCC 4.8.2] on linux2 Obrigado pela Atenção ! ! !
  12. Olá! Sou iniciante em C, mas acho que posso lhe ajudar . . . - |24|error: expected ‘;’ before ‘else’| - esse erro está dizendo que é esperado um ponto e virgula ( ; ), antes do else, ou seja, você esqueceu de colocar o ponto e virgula após algum comando, mais especificamente a função printf() da linha anterior - |14|warning: spurious trailing ‘%’ in format – esse alerta está lhe alertando para a falto do código de formatação do scanf() da linha anterior, scanf ("%", login); faltou você apenas colocar a letra “ s ” após o “ % ” - |13|warning: too many arguments for format – esse alerta está lhe dizendo que você tem mais argumentos do que códigos de formatação para representar os mesmos, ou seja, você colocou o argumento “ login ” para a função scanf(), mas como você não definiu o código de formatação de forma correta %s, o compilador esta interpretando que % não é um código de formatação, por isso ele está dizendo que está faltando códigos de formatação para os argumentos. - |19|error: ‘logado’ undeclared (first use in this function)| - aqui o erro está lhe dizendo que a variável logado, não foi declarada ainda em nenhuma parte do programa, e por isso mesmo você não pode atribuir nenhum valor a variável antes de declará-la, basta declará-la no inicio do código junto as outras variáveis - os três alertas seguintes ocorrem pelo mesmo problema, o fato de você ter colocado o “ ; ” onde não deveria scanf ; ("%s",senha); é só tirar o “ ; ” do meio: scanf ("%s",senha); |16|warning: statement with no effect |16|warning: left-hand operand of comma expression has no effect |16|warning: statement with no effect - esta parte está completamente errada por dois motivos: if (login ="admin") e (senha="123");logado = 1; O primeiro motivo é que: Na linguagem C o sinal ( operador ) “ = ” e o sinal ( operador ) ” == ”, tem significados e funções completamente diferentes: O sinal “ = ” é usado como operador de atribuição, ou seja, é usado para atribuir um valor a uma determinada variável, e não para comparação de valores, por exemplo: int idade;idade = 12; Primeiro foi declarado uma variável do tipo inteiro cujo nome é idade, depois foi atribuído ( dado – atribuído ) o valor 12 a variável idade, que a partir deste momento armazena o valor 12, apenas observando que você pode fazer as duas coisas ao mesmo tempo int idade = 12; neste exemplo atribuiu-se um valor a variável idade ao mesmo tempo em que ela foi declarada. O sinal “ == ” é um operador usado para a realização de comparação entre dois valores, exemplo: int idade_1 = 12;int idade_2 = 13;if ( idade_1 == idade_2 ) { printf(“Idades Iguais . . .”); } O segundo motivo é que: O comando if() é usado para a avaliação de condições, ou seja, o if irá avaliar uma ou mais condições, e caso a/as condições sejam verdadeira irá executar o código logo após o if, e que de preferência o código deve estar contido dentro de abre e fecha chaves { } se fosse o caso do exemplo acima que citei o código estaria correto e poderia ser usado sem problemas, pois, se está comparando dois valores numericos, mas no seu caso você que comparar os valores de um vetor de caracteres ( strings ) palavras e infelizmente a linguagem c não consegue fazer a comparação entre duas strings ( palavras ) de forma direta, causando erros, exemplo: char nome_1 [ 10 ] = “marcos”;char nome_2 [ 10 ] = “jose”;if ( nome_1 == nome_2 ) { printf(“Nomes Iguais . . .”); } Muito provavelmente o código acima seria compilado e executado normalmente, mas o código após o if não seria executado, pelo motivo acima já citado. Para resolver este problema você tem que usar uma função que tenha sido especialmente desenvolvida para a tarefa, strcmp(); char nome_1 [ 10 ] = “marcos”;char nome_2 [ 10 ] = “jose”;if ( strcmp ( nome_1, nome_2 ) == 0 ) { printf(“Nomes Iguais . . .”); } strcmp() recebe os valores de duas variáveis do tipo ( string ) e as analisa ( compara ), se os valores das duas é igual, a função retorna 0, caso contrario retorna 1, sendo que independentemente de retronar 0 ou 1, o valor de retorno será avaliado diretamente pelo if() A função se encontra na biblioteca #include<string.h> Bom por hora é só, espero que tenha entendido o que eu quis dizer, com o que eu lhe expliquei acima tenho certeza que lhe dará alguma luz para terminar o seu codigo! Obs: a não ser que o problema tenha sido causado por editores de texto, tome muito cuidado por onde você deixa os ; isso pode lhe causar problemas no futuro. Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  13. Olá! Olha sou iniciante em C, mas dei uma olhada rápida, e parece que o problema parece estar relacionado aos seguintes alertas apresentados a seguir: |69|warning: format ‘%d’ expects a matching ‘int’ argument |79|warning: format ‘%d’ expects a matching ‘int’ argument - você esqueceu de colocar os argumentos para os printf(): printf("- %d - "); acredito que o correto seria : printf ( "- %d - ", vetor [ i ] ); - uso o sistema operacional Linux Ubuntu 14.04, então tive que substituir a função gech(); por getchar(); e não tive nenhum problema, por hora. - funções do tipo system(); como - system("pause"); fazem chamadas a componentes do sistema, e que dependendo do sistema, pode vir a causar problemas no seu programa durante a execução, por isso só use tais chamadas se for necessario e se tiver plena certeza de seu funcionamento. se voce usou system("pause"); para poder visualizar os resultados evitando que a tela se feche, você pode substitui-la por getchar(); - Tente especificar os problemas que o programa está apresentando, pois, os testes simples que realizei o programa parece estar funcionando, com execeção das opções " b " e " c ", se der tempo tento postar algo ainda hoje . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  14. Olá! Sou iniciante em C, alem de que sou pessimo em matrizes, mas . . . acho que só faltou os laços for para mostrar os valores da matriz: int p = 0;int k = 0;for ( p = 0; p < 3; p++ ) { for ( k = 0; k < 3; k++ ) printf ( "%d", x [ p ] [ k ] ); printf ( "\n" ); } return 0;} Lembrando que sou pessimo em matrizes, mas acho que o codigo que lhe passei acima já lhe dará alguma luz . . . - a proposito, a observação feita pelo Math.P é muito importante, voce deve tomar muito cuidado na hora de preencher um vetor, principalmente para não ultrapassar os seus limites . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espqero Ter Ajudado ! ! !
  15. Olá! Sou iniciante mas, acho que posso ajudar . . . - |34|warning: unused variable ‘soma’ -este alerta está lhe dizendo que a variável soma não está sendo usada para nada, pelo menos ate esta parte do código. - O problema que deve estar impedindo a compilação e execução do programa, pelo menos aqui, deve estar na chave de fechamento da função que você definiu “ void soma_matriz(int a[M][N]) ” você a colocou na linha 62 após a chave de fechamento de main(), é só tira-la de lá e coloca-la no lugar certo - Mas após corrigir a chave cria-se um erro: |35|error: ‘fp’ undeclared (first use in this function)| - deve estar ocorrendo porque o ponteiro para o arquivo ficou visível apenas dentro da função que você definiu e não pode ser visualizada na função main(), para mim foi só colocar “ FILE *fp; “ no inicio da função main() - e como é de se esperar como não tenho o arquivo, deu erro na leitura do mesmo . . . - e um observação as ultimas linhas da sua função main() estão estranhas, acho que você deveria inverte-las, colocando o return 0; depois da chamada a função " soma_matriz() " return 0;soma_matriz(matriz); Bom por hora é só . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  16. Olá! Sou iniciante em C, mas acho que posso lhe ajudar . . . - |10|warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘char (*) - aqui este alerta está lhe dizendo que os tipos definidos no código de formatação do scanf() “ %c ” e do argumento “ Senha ” são diferentes. Isso ocorre porque você definiu a sua variável “ char Senha[100] ” como sendo uma cadeia de caracteres ( string ) enquanto que o código de formatação " %c " é usado para ler um único caractere armazenado em uma variável “ char Senha ”, é só colocar o código de formatação correto “ %s ” - Sendo que após a mudança caso apareça este alerta e você não saiba o seu significado: |10|warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*) - é porque em uma cadeia de caracteres o endereço do primeiro elemento é usado para referenciar ao restante dos elementos subsequentes, sendo assim na função scanf() não é necessário o uso do “ & ” para ( strings ) - |11|warning: comparison with string literal results in unspecified behavior – este alerta é também uma das possíveis, senão a principal causa do que está causando o erro no seu programa. Aqui o alerta está lhe dizendo que a comparação direta entre o valor da variavel “ Senha ” ( string ) e a string “ Ola ”, pode vir a causar efeitos inesperados. O modo certo de fazer tal comparação seria usando uma função especialmente desenvolvida para a tarefa strcmp(); if ( strcmp ( Senha, "Ola") == 0 ) Alem disso o voce deve colocar o codigo a ser executado caso a comparação do if seja positiva entre chaves de abertura e de fechamento e apos, o else, tambem é aconselhado colocar o codigo que será executado caso a comparação do if seja negativa entre chaves de abertura e de fechamento. - Sendo que se o seu compilador apresentar algum erro ou alerta referente a linha na qual a função strcmp(); foi usada, isso deve ocorrer porque faltou colocar a biblioteca da qual a função faz parte #include <string.h> - quase esqueci, funções como system ("pause"); são funções que fazem chamadas a componentes do sistema, e que podem variar conforme o sistema, principalmente se houver algum problema no sistema que impeça o seu programa de usar tais chamadas, sendo assim é aconselhavel evitar tanto quanto possivel tais chamadas. Se a sua intenção erra o de evitar que a tela do programa se fechasse imediatamente, apos a execução do mesmo impossibilitando você de visualizar o conteudo, você pode usar a função getchar(); no lugar de system ("pause"); Bom por hora é só, veja se as dicas acima lhe ajudam . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  17. Olá! Sou iniciante em C, mas acho que posso ajudar em algo . . . - |3|fatal error: conio.h: Arquivo ou diretório não encontrado| - no meu caso ( Linux ) não posso ajudar com relação as funções pertencentes a bibliotea <conio.h> - |19|error: invalid preprocessing directive #inclide| - acho que você deve ter apertado alguma tecla que não deveria, é só excluir essa parte - os alertas seguintes estão te alertando para que a função gets() é uma função perigosa de ser usada e que deve ser evitada, eu usei scanf() no lugar dela e tente também buscar informações sobre os problemas associados a função gets() e evite usa-la sempre que possivel . . . |27|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]| |30|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]| |33|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]| |36|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]| - |36|error: ‘struct membros’ has no member named ‘gpreferido’| - este erro está indicando que a sua estrutura não possui o membro “ gpreferido ”, isso ocorre porque a linguagem C é case sensitive “ gpreferido ” é diferente de “ Gpreferido ” - com relação a função fflush(stdin); - dependendo da complexidade do código e do sistema como um todo, a função pode apresentar um comportamento anormal durante a execução do programa, tente buscar informações sobre códigos de formatação que podem ser usados no próprio scanf() e que realizam a limpeza de Buffer do Teclado de forma mais segura . . . no melhor dos casos não use fflush(stdin); - main.c|| referência indefinida para `getche'| - como já havia dito não posso usar as funções da biblioteca <conio.h> por estar usando o linux . . . mas acho que getchar(); pode me quebrar um galho - |16|warning: return type defaults to ‘int’ - aqui o alerta está lhe dizendo que como você não definiu o tipo de retorno da função main(), por padrão o compilador o definiu como sendo do tipo “ int ” - |46|warning: control reaches end of non-void function – faltou o return 0; antes da chave de fechamento da função main() |30|warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char (*)[2]’ - bom aqui o problema deve ser porque quando coloquei a função scanf() o fiz com o código de formatação %d, mas como a sua variável “ idade ” foi declarada como “ char ” - este alerta está nos alertando para a incompatibilidade dos tipos, a não ser que seja necessário ao seu código, lhe aconselho a declarar a variável “ idade ” como sendo do tipo “ int ” - Bom ate aqui o código parece estar funcionando, só falta realmente as funções de menu e listagem dos membros segundo os critérios especificados, mas nisso não vou poder ajudar agora, preciso ir trabalhar, tente buscar informações de como fazê-lo, se possível posto algo ainda hoje, mas vai ser muito difícil Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Esperto Ter Ajudado ! ! !
  18. Olá! Sou iniciante em C mas acho que posso ajudar um pouco . . . - nos dois erros seguintes faltou você colocar o nome das bibliotecas que você deseja usar – muito provavelmente você deve usar <stdio.h> e <stdlib.h> |1|error: #include expects "FILENAME" or <FILENAME>| |2|error: #include expects "FILENAME" or <FILENAME>| - |215|error: ‘caso’ undeclared (first use in this function)| - aqui você colocou “ caso ” no lugar de “ case ” - |218|error: expected ‘;’ before ‘break’| - faltou um “ ; ” no printf() da linha anterior - nos dois erros seguintes o compilador está lhe dizendo que não existe qualquer referencia no código sobre a função que você está tentando chamar, muito provavelmente porque você não as criou ainda . . . Obs.: dependendo da sensibilidade das configurações do seu compilador e/ou IDE – o alerta para este tipo de erro pode não ser mostrado |204|referência indefinida para `verCadastros'| |212|referência indefinida para `fecharConta'| - |230|referência indefinida para `cadastroHotel'| - aqui você errou o nome da função que você está tentando chamar “ cadastro() ” você colocou no lugar “ cadastroHotel() ” - Existem outros alertas que o compilador está me retornando, e que provavelmente vão causar erros no seu programa, mas por hora não vou ter tempo para explicá-los agora Bom com isso já dá para executar o programa, mas pelo teste rápido que fiz quando executei o programa, acho que ainda tem alguns erros, mas por hora não vou poder ajudar, vou tentar ver isso com calma mais tarde . . . Veja se já consegue arrumar o programa com as dicas acima . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  19. Olá! Oi sou iniciante em C, mas acho que posso lhe ajudar um pouco . . . Aqui o meu compilador retornou os seguintes alertas: |4|warning: return type defaults to ‘int’ - esse alerta está te alertando que você não definiu o tipo de retorno para a função main(), e por isso o compilador o definiu por padrão como sendo do tipo “ int ” |22|warning: control reaches end of non-void function – esse alerta está te alertando que a função main(), como lhe foi definida pelo compilador o tipo de retorno como sendo “ int ”, por padrão no final da função antes da ultima chave de fechamento de main(), faltou você colocar um return 0; |14|warning: ‘resultado’ may be used uninitialized in this function – neste caso o mais provável é de que este alerta está te alertando de que a não inicialização da variável “ resultado ” pode causar algum problema no futuro, pois, se existir algum outro valor na porção de memoria ocupada pela sua variável o chamado ( lixo de memoria ), este valor poderá ser usado no seu programa causando os mais diversos problemas, no meu caso surgiu o seguinte valor para a variável “ resultado ” ( - 1928848504830 ) por isso é sempre bom iniciar as suas variáveis com algum valor antes que estas sejam utilizadas pelo seu código, no meu caso um simples resultado = 0; já é o bastante Com relação ao erro estranho ele está acontecendo pelo seguinte: - a variável que irá armazenar o maior valor é a variável “ resultado “, porém no seu código o if, ate faz a comparação entre o numero digitado e o valor da variável “ resultado ”, mas o valor da variável “resultado” ( 1 ) muito provavelmente é lixo de memoria de algum valor que está sendo alocado ali ou que está sendo definido durante a execução do programa, para isso defina um valor como resultado = 0; antes de usar a variável - além disso o valor da variável “ resultado ” permanecerá igual durante toda a execução do programa, pois você não está alocando um novo valor lido da variavel “ n ” para a variável “ resultado”, if ( n > resultado ) { resultado = n; } - alem disso contador++; deve ser colocado antes da chave de fechamento do while e não do if - embora não esteja errado o printf que irá exibir o maior numero deve ficar fora do laço while, caso contrario ele será exibido toda vez que o laço for reiniciado, a não ser que este seja o seu objetivo - apenas lembrando de que " " " contador=1; // contador=1 para guardar o maior " " " a variavel " contador " irá ser usada como parte da expressão que irá controlar a execução do laço while() Bom por hora é só, veja se as dicas acima resolvem o seu problema . . . Ubuntu 14.04 GCC 4.8 CodeBlocks 13.12 Espero ter Ajudado ! ! !
  20. Olá! Olha sou iniciante em C, não sei se já conseguiu resolver o problema, mas acho que posso lhe ajudar . . . A unica modificação que tive de fazer aqui por hora foi - int z = 0; int n = 0; O ideal quando se declara as variaveis em C, é de que elas sempre sejam iniciadas com algum valor mesmo que 0, antes de serem usadas e da forma que você declarou as suas variaveis você não as iniciou, e pelo menos inicialmente separe uma variavel para cada tarefa e só depois quando já tiver uma boa estruturação de como o algoritmo realmente funciona, ai sim você pode tentar usar a mesma variavel em duas tarefas diferentes, pois você usa a variavel i para o laço for e como contador para a posição do numero, mas já vi gente tendo problemas ao fazer isso. E da forma como você declarou os seus vetores, embora funcione acredito que está seja uma forma perigosa de se fazer, tenho certeza de que existe o modo correto, mas por hora não o aprendi, mas da forma como você fez o ideal seria que os valores de z e n, fosse iniciados antes de você declarar ou mesmo usar o seu vetor, ou mesmo que o tamanho do vetor fosse definido logo na sua declaração ex: int n[10]; int z[10]; - apenas com as dicas, pelo menos aqui o codigo parece funcionar! Dê uma olhada neste post que apresenta o uso de um vetor de forma similar a sua: http://forum.clubedohardware.com.br/forums/topic/1125097-ajuda-no-algoritmo/#entry6185490 Com relação ao compilador e a IDE, lhe aconselho a instalar: - O compilador GNU GCC http://tdm-gcc.tdragon.net/ - A IDE CodeBlocks 13.12 http://www.codeblocks.org/ pois, infelizmente o Dev - C++ é um projeto que foi descontinuado e que embora tenham tentado revive-lo: http://orwelldevcpp.blogspot.com.br/ - ainda assim lhe aconselho os dois acima: Bom por hora é isso . . . Ubuntu 14.04 GNU GCC 4.8 CodeBlocks 13.12 Espero Ter Ajudado ! ! !
  21. Na verdade são as duas coisas, eu não me lembro agora de onde eu li isto, mas só sei que dizia que para os iniciantes em programação e mesmo os mais experientes, era melhor deixar tudo bem separado e organizado, pelo menos durante a parte de desenvolvimento inicial do codigo, e só mais tarde tentar deixar o codigo mais enxuto. Exemplo: for ( v = 0; v < qntN; v++ ) { printf ( "\nInforme a nota da prova %d: ", i ); scanf ( "%f", &n [ v ] ); i++; media = media + n [ v ]; }
  22. Olá! Olha as mesmas observações que citei acima valem aqui, só fiz umas alterações aqui e outra ali: #include <stdio.h>#include <stdio.h>int main() { char nome [ 30 ]; int qntN = 0; int i = 1; int v = 0; int z = 0; float n [ qntN ]; float media = 0; printf ( "\nInfome o nome do aluno: " ); scanf ( "%s", nome ); printf ( "\nInforme a quantidade de notas do %s: ", nome ); scanf ( "%d", &qntN ); for ( v = 0; v < qntN; v++ ) { printf ( "\nInforme a nota da prova %d: ", i ); scanf ( "%f", &n [ v ] ); i++; } for ( z = 0; z < qntN; z++ ) { media = media + n [ z ]; } media = media / qntN; printf ( "\nA media do aluno e: %f\n", media ); getchar(); return 0; } - Com relação aos dois alertas seguintes, eles estão relacionados a função gets(), ela possui alguns problemas que podem causar problemas no codigo, acho melhor você não usa-la, e buscar sobre estes problemas antes de continuar . . . |11|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) |11|aviso: the `gets' function is dangerous and should not be used.| Atualizando . . . Espero ter Ajudado ! ! !
  23. Olá! Olha executei o codigo aqui atraves do depurador, mas pelo que pude ver não, pelo menos não apareceu o numero de posições relativos ao valor que eu inserir, por hora parece que apenas colocando a quantidade diretamente ao declarar o vetor ex: float n [ 3 ]; Eu já consegui fazer algo similar ao que você tá dizendo, mas agora não me lembro bem como, talvez se me surgir alguma luz eu poste algo hoje, senão amanha . . . Obs.: Pelo que vi aqui os valores parecem estar sendo armazenados cada um em uma posição especifica propria de memoria, pois acredito que caso contrario o programa não calcularia corretamente, mas exatamente o que está acontecendo eu não faço a memor ideia . . . porque aqui a IDE durante o processo de depuração não me mostra onde os valores que são introduzidos estão sendo armazenados no vetor. Sem contar que sou INiciante em Programação . . . Bom só posso ir ate aqui . . . Espero Ter Ajudado ! ! !
  24. Oi de novo . . . Olha tentei executar o codigo só que desta vez emulando o codigo via wine, e ele funcionou legal . . . apenas observando que usei a IDE codeblocks. Com relação ao codigo deixei passar está parte: float maiorNota = n [ 0 ]; eu a mudei para float maiorNota; e o codigo funciona nomalmente acho que pode ser esse o problema, mas acho difícil . . .
  25. Realmente é estranho aqui o codigo rodou legal, vou tentar algo aqui e já retorno.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!