Ir ao conteúdo
  • Cadastre-se

FelipePetropolis

Membro Pleno
  • Posts

    41
  • Cadastrado em

  • Última visita

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

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