Pulse 0 Denunciar post Postado Maio 22, 2015 Escrever um programa que leia um caractere digitado pelo usuário e uma string. O programa deve mostrar na tela: - a primeira posição onde aparece o caractere digitado e - quantos caracteres a string possui após a primeira posição onde aparece o caractere digitado. Se o caractere não aparecer na string, imprimir -1. #include <stdio.h> #include <string.h> int main () { char s[100], c; int i, cont=0, tem=0, posi; puts("Digite uma frase"); fgets(s, 100, stdin); puts("Digite um caractere"); scanf("%c%*c", &c); for(i=0; i<strlen(s); i++) { if(s[i] == c) { tem = 1; posi = i; for(i=i+1; i<strlen(s); i++) { cont++; } } } if(tem == 0) { printf("-1"); } else { printf("A posicao em que %c aparece eh %d. Ha %d caracteres depois dele", c, posi, cont); } } O resultado do contador sempre está indicado um valor a mais do que o correto, já mudei o código várias vezes procurando erros mas não consigo encontrar. Alguém sugestão do que pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 23, 2015 Leia o manual do fgets:http://www.cplusplus.com/reference/cstdio/fgets/A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str. #include <stdio.h> #include <string.h> int main (void) { char frase[100] = "aqui tem uma frase", c='i'; int index; char * posicao = strchr(frase, c); if (!posicao) { puts("Não há esse caractere na string."); } else { index = (int)(posicao-frase); printf("%d\n",index); printf("%d\n", strlen(frase)-index-1); } return 0; } http://linux.die.net/man/3/strchr Ficar alterando a variável de controle do for em outros lugares que não o terceiro bloco da instrução é pedir p/ dar confusão em algum momento. Não faça isso. for(i=0; i<strlen(s) && s[i]!=c; i++); // A condição de parada inclui encontrar o caractere. if (i == strlen(s)) {puts("-1");} else { printf("posição: %d\n Caracteres restantes: %d\n", i, strlen(s)-i-1); } Compartilhar este post Link para o post Compartilhar em outros sites