Ir para conteúdo
Fórum Script Brasil

ScreenBlack

Membros
  • Total de itens

    61
  • Registro em

  • Última visita

Tudo que ScreenBlack postou

  1. Aspas simples é utilizada para referenciar APENAS um carácter (exceto os especiais, como por exemplo, terminador de string - '\0'), pois indica uma conversão direta para um valor inteiro. Pode conferir a referência neste link. Aspas duplas referencia uma bloco de memórias e retorna a referência para a variável, e já contém o terminador de string. O vetor de char, utilizado no seu caso, é um ponteiro estático que referencia para uma área de memória. O valor desse ponteiro não pode ser alterado, mas o conteúdo da string sim - desde que não ultrapasse o tamanho pré-definido. Portanto, quando faz a comparação de um vetor com um conteúdo usando aspas simples, estará fazendo, internamente, uma comparação entre ponteiro e inteiro. Quando faz a comparação de um vetor com um conteúdo entre aspas duplas, estará fazendo comparação entre valores de referências (não é o conteúdo, em sí) de memória. Para saber se o conteúdo do vetor é um espaço, utilize assim: if ( strcmp( nome1, " " ) == 0 ) Ou então, valide direto pelo valor de retorno: if ( ! strcmp(nome1, " " ) ) // Retorno é zero quando conteúdos comparados forem iguais. Usando a exclamação, esse valor é invertido, transformando-se em um ("TRUE"), tornando o "if" válido.
  2. ScreenBlack

    Dúvida usando If

    Obrigado, colega Maligno. Havia copiado do código dela e não me atentei ao sinal de atribuição. Corrigi meu post anterior. Att.
  3. ScreenBlack

    Dúvida usando If

    Olhando o código por cima, já encontrei o provável erro: if ( linha == 0 && opcao < 11 || opcao > 15 ) A ordem de proridade na execução das comparações acima é: Primeiro: && Segundo: || Seria o mesmo que fazer: if ( ( linha == 0 && opcao < 11 ) || opcao > 15 ) Acredito que não seja isso que você queira, mas sim, isso: if ( linha == 0 && ( opcao < 11 || opcao > 15 ) ) Esse tipo de provável erro ocorre em várias comparações. Pode conferir a ordem de precedência dos operadores aqui. Att.
  4. Nesse meu post em outro tópico, respondo a mesma dúvida que a sua. Att,
  5. Trabalhar com tipo float pode dar dor de cabeça em certas situações. Isso é normal. :P Precisamos definir certos limites quanto a quantidade de casas após a vírgula. No seu caso, você vai limitar em 2 casas, portanto, daria pra fazer assim: double numero = 15.5; int inteiro = numero / 1; // Salva a parte inteira do float em uma variável do tipo inteiro //int inteiro = (int) numero; // Usando typecast também é possível salvar a parte inteira do float em uma variável do tipo inteiro double resultado = (numero - inteiro) * 100; // Pega a parte fracionada, multiplica por cem, convertendo-a para inteiro printf("Inteiro: %d\n", inteiro); printf("Fracao: %d\n", (int) resultado); // Typecast de float para inteiro
  6. Você não está isolando o segundo "printf()": if ( x < 0 && y > 0 ) { result = y - x; printf("%d\n", result - 1 ); } else { result = y - x; printf("%d\n", result); } O valor 1920 é a saída do primeiro "printf()" que é 19 com o segundo que é 20. Como não possuia quebra de linhas, eles eram mostrados juntos.
  7. Existe a possibilidade sim. Pode fazer com ela toda em float, que vai funcionar. Caso queira realmente faze-la mista (não aconselho muito, pois pode gerar confusão) é trabalhar a matriz com o tipo void.
  8. Como você não comentou em qual linguagem, vou me basear na C, que é qual tenho maior afinidade. 1) Criar um loop ("while()" ou "do-while()") que pare quando o caracter lido for o terminador de arquivo ("EOF" - End Of File). Pode fazer diretamento usando o comparativo "EOF" ou então através da função "feof()". 2) Dentro do loop, utilizar a função "fread()", que permite fazer a leitura de um tipo específico numa quantidade também específica. Att.
  9. Crie um outro vetor de inteiros onde armazenará os números já repetidos já identificados. No loop principal, quando encontrar um número repetido, veja se ele também está no vetor de números repetidos. Caso não esteja, armazene esse novo número repetido no vetor e então mostre na tela. Att.
  10. Na atribuição do último "if()", a variável "*pRaiz" está recebendo o valor de "atual", perdendo assim a referencia inicial. E como a variável "atual" estava apontando para um elemento anterior ao novo, "pRaiz" também apontará para ele, fazendo com que mostre apenas os dois últimos elementos da lista. Tente retirar essa linha, para ver se dá certo. Att.
  11. Esse valor é recebido por parâmetro na rotina principal do programa. Os parâmetros são: "int argc" -> Informa a quantidade de parâmetros recebidos "char argv[]" -> Vetor com o conteúdo dos parâmetros A partir daí, basta tratar esse conteúdo pra fazer o que desejar.
  12. Muito bom. Seu programa funciona corretamente. Mas, aconselho fortemente em não usar "goto". Seu uso costuma ser abolido dos códigos, porque permite quebrar a estrutura lógica. Fiz uns ajustes em seu código, e uma delas foi trocar o "goto" por "while()". Segue código para fim comparativo: #include <stdio.h> #include <stdlib.h> #include <string.h> void program(void) { int a = 0; int b = 0; int c = 0; int d = 0; int i = 0; int s_0[16] = {0}; int def_0 = 15; int var_p = 0; printf("Digite um numero a ser convertido:\n"); scanf("%d", &a); b = a / 2; c = b * 2; d = a - c; s_0[def_0--] = d; while ( b > 0) { i = b; b = b / 2; c = b * 2; d = i - c; s_0[def_0--] = d; } printf("resultado: \n"); for( ; var_p < 16; var_p++ ) printf("%d", s_0[var_p] ); printf("\n"); } int main(void) { char help[20] = "ajuda"; char conversor[20] = "conversor"; char sair[20] = "sair"; char ler[20] = {'\0'}; while( strcmp( ler, sair ) ) { printf("Escolha uma funcao:\n%s\n%s\n%s\n\n\n", conversor, help, sair); scanf(" %s", ler); if( strcmp(ler, sair) ) { if( !strcmp(ler, conversor) ) { program(); printf("\n\n\n"); } else if( !strcmp(ler, help) ) printf("convertor: converte numeros decimais em binario\nquit: finaliza o programa\n"); else printf("Esta funcao não e reconhecida, digite help para mais informacoes\n"); } } return 0; }
  13. Nunca desenvolvi essa criptografia, mas, referente ao tipo "uint32_t", serve para garantir que o inteiro possua 32 bits. Para utilizar esse tipo, é preciso definir a biblioteca "stdint.h". Pelo que consta no site que você passou, essa criptografia utiliza 64 bits, por isso existe um array de inteiro com 2 posições. Espero que ajude. Att.
  14. 1) A função "Main()" não possui o tipo de retorno. 2) Faltou informar o ponteiro das variáveis que receberão os valores de entrada. 3) Algumas linhas não estão finalizadas por ponto e vírgula. #include <stdio.h> int main(void) // Faltou o retorno "int" { // Aconselhável sempre iniciar as variáveis int anoAtual = 0; int anoNasc = 0; int idade = 0; int meses = 0; int semanas = 0; int dias = 0; printf("Informe o ano atual com 4 digitos: "); scanf("%i", &anoAtual); // Faltou informar o ponteiro printf("Informe o ano do seu nascimento com 4 digitos: "); scanf("%i", &anoNasc); // Faltou informar o ponteiro idade = anoAtual - anoNasc; printf("Sua idade em anos: %.0i.\n\n", idade); meses = idade * 12; // Faltou o ponto e vírgula printf("Sua idade em meses: %.0i.\n\n", meses); semanas = meses * 12; // Faltou o ponto e vírgula printf("Sua idade em semanas: %.0i.\n\n", semanas); dias = semanas * 7; // Faltou o ponto e vírgula printf("Sua idade em semanas: %.0i.\n\n", dias); return 0; }
  15. Seria algo do tipo: printf("\nA soma de %d com %d: %d", x, y, z);
  16. Está armazenando o valor lido, no mesmo vetor que está sendo organizado, fazendo com que posições sejam sobrescritas. Crie uma outra variável, apenas para armazenar o valor lido e depois inserir no vetor: while( i < 30 ) { printf("entre com um valor inteiro para a %d posicao do vetor: ",i+1); scanf("%i",&numLido); if( (numLido % 2) == 1 ) vetor[auximpar--] = numLido; else vetor[auxpar++] = numLido; i++; }
  17. ScreenBlack

    Comparação de Char

    Tente trocar para: if ( (aux!='A') || (aux!='G') || (aux!='T') || (aux!='C'))
  18. Esse código funcionou sem erros de compilação. Porém, ele sobrescreveu o valor da posição informada no parâmetro, sem efetuar o deslocamento dos elementos.
  19. 1) Não utilize "fflush()" para limpar buffer de entrada. O resultado pode ser inesperado, conforme própria especificado na própria documentação da linguagem. Para contornar isso, utilize: scanf("%*c%[^\n]s", ...); A máscara "%*c" faz com que seja ignorado o primeiro caracter do buffer, que seria o "lixo" da memória (que geralmente é apenas o código da quebra de linha). 2) Tem função "printf()" com máscara errada para o tipo de dado que será apresentado: fprintf(f, "%s ", contacto[j].FP); fprintf(f, "%s ", contacto[j].AM1); fprintf(f, "%s ", contacto[j].SD); fprintf(f, "%s ", contacto[j].ALGA); fprintf(f, "%s ", contacto[j].CM); Eles deveriam ser do tipo "%d" (ou "%i", que é a mesma coisa) 3) Na função "adicionar()", a função "printf()" seria apenas para mostrar o texto, porém, está recebendo parâmetros desnecessários. printf("\nIntroduza o Nome: ", i + 1);
  20. Precisa migrar pra C++. Até porque, o tratamento para POO, apenas o C++ possui. Além disso, o C++ possui os tipos específicos que utilizam a estrutura POO, ao contrário do C. Por exemplo: Em C, para criar uma string, é preciso de um vetor de char, feito "manualmente". Em C++, esse controle é maior e mais simplificado, exatamente por causa da estrutura POO.
  21. Está com cara de que o compilador não está encontrando o arquivo de "header" para fazer a identificação das "structs". Testei aqui e funcionou. Única coisa que tive de modificar, foi o nome do "define", que conflita com o nome da "struct". Mudei para "#ifndef _Pessoa", "#define _Pessoa".
  22. Assim como foi utilizado o "for()" para listar os livros, crie um para verificar se o livro existe.
  23. Colega vega, os códigos postados pelo colega roccoC/C++ são códigos funcionais, prontos. Pelo que entendi, ele posta como exemplo. Provavelmente para pesquisas futuras de outros usuários, ou até mesmo pra ele. O título é sempre em caixa alta, pra diferenciar. Colega roccoC/C++, parabéns pelo trabalho. Gostaria de ressaltar algumas considerações referente ao seu código. Não é aconselhado usar a função "fflush(stdin)". Ela pode ter comportamento inesperado (e realmente já tive), conforme diz a própria documentação padrão. Foi criada pra limpar o buffer de saída de vídeo e de arquivos. Para fazer uma leitura do teclado sem ter problemas com o buffer, use um espaço dentro do formato a ser recebido. Além disso, o mais adequado seria usar o "fscanf()" para leitura. Exemplo para leitura de inteiros: fscanf(stdin, " %d", &variavel); Para leitura de string, aconselha limitar o tamanho máximo a ser lido, pra não estourar o tamanho do vetor: fscanf(stdin, " %50[a-zA-Z0-9 ]s, variavel); // Permite até 50 caracteres, além disso, só aceitará caracteres do alfabeto (maiúsculo e minúsculo), números e espaços. E vamos, que vamos! :) Abraço a todos.
  24. Quando o compilador vai montar o executável, ele cria um cabeçalho de execução, para o S.O. saber iniciá-lo. Esse endereço de memória aponta para uma área do cabeçalho onde contém essa string. A parte do cabeçalho que contem essa string, parece que é pra manter compatibilidade com o sistema DOS. Se for tentar rodar esse programa no DOS, aparecerá essa mensagem. Além disso, essa área de memória realmente não pode ser alterada, pois está armazenada na memória estática. Se permitisse, estaria alterando o próprio arquivo binário (executável).
  25. Seu código está funcionando corretamente. Pra testar, montei uma estrutura, uma função pra mostrar os números da lista e usei a sua função, sem alterar. Segue: #include <stdio.h> #include <stdlib.h> typedef struct tLista { int valor; struct tLista *prox; } lista; void inserir(lista **p) { lista *atual, *novo, *anterior; int num; novo = (lista *) malloc(sizeof(lista)); atual = *p; anterior = NULL; printf("Insira um valor: "); scanf("%d", &num); novo->valor = num; if(atual == NULL){ novo->prox = NULL; *p = novo; } else{ while(atual != NULL && atual->valor < num){ anterior = atual; atual = atual->prox; } novo->prox = atual; if(anterior == NULL){ *p = novo; } else{ anterior->prox = novo; } } } void mostraLista(lista *p) { while(p != NULL) { printf("Valor: %d\n", p->valor); p = p->prox; } } int main(void) { lista *inicio = NULL; char opcao = 's'; while( opcao == 's' || opcao == 'S' ) { inserir(&inicio); printf("Deseja inserir outro? (S/N)\n"); scanf(" %c", &opcao); } mostraLista(inicio); return 0; } Depois de inserir os valores 10, 20, 16 e 7, a função "mostraLista()", mostrou a ordem correta.
×
×
  • Criar Novo...