Inacabado Posted January 31, 2018 at 08:29 PM Report #609177 Posted January 31, 2018 at 08:29 PM Muito boa noite ao forum. Escrevi um programa de um livro que supostamente deveria converter todos os caracteres inseridos na string em maiusculas e contar igualmente todos os sináis de pontuação inseridos. O código é simples de entender e não me acusa qualquer erro de compilação mas estranhamente não faz o pretendido. Ou melhor, faz, mas só em parte: converte todos os caracteres em maiusculas, mas estranhamente aponta todos os caracteres inseridos como caracteres de pontuação. Eis o código: /*mod_str.c --modifies a string*/ #include <stdio.h> #include <string.h> #include <ctype.h> #define LIMIT 81 void toUpper(char*); int punctCount(const char*); int main(void) { char line[LIMIT]; char *find; puts("Please enter a line:"); fgets(line,LIMIT,stdin); find=strchr(line,'\n'); //look for a newline if(find) //if the address is not NULL, *find='\0'; //place a null character there toUpper(line); puts(line); printf("That line has %d punctuation characters\n", punctCount(line)); puts("Bye."); return 0; } void toUpper(char *str) { while(*str) { *str=toupper(*str); *str++; } } int punctCount(const char *str) { int count=0; while(*str) { if (ispunct(*str)); count++; str++; } return count; } Se eu inserir: Me? You talkin' to me? Get outta here! converte em : ME? YOU TALKIN' TO ME? GET OUTTA HERE! That line has 38 punctuation characters Comportamento estranho e não estou a ver o erro de semântica. Agradecia muito uma ajuda do forum. Abraço Bye.
HappyHippyHippo Posted February 1, 2018 at 12:00 AM Report #609179 Posted February 1, 2018 at 12:00 AM dois erros : - o incremento do ciclo existente na função toUpper - a instrução executada na condição if do ciclo da função punctCount olha bem para esta última ! qual é a instrução que está a ser executada caso a condição do if for verdadeira ? 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Inacabado Posted February 1, 2018 at 08:24 AM Author Report #609183 Posted February 1, 2018 at 08:24 AM yappp... Aquele ';' está ali a mais na função punctCount()! Obrigado HHH. Mas continuo sem dar resposta à pergunta que fizes-te... 8 horas atrás, HappyHippyHippo disse: olha bem para esta última ! qual é a instrução que está a ser executada caso a condição do if for verdadeira ? Porque é que o programa estava a contar todos os caracteres como pontuação e em que é que aquele ';' ali contribuia para isso??? Vou pensar nisso e já posto...
HappyHippyHippo Posted February 1, 2018 at 08:26 AM Report #609184 Posted February 1, 2018 at 08:26 AM porque isto : if (ispunct(*str)); count++; é o mesmo que isto : if (ispunct(*str)) { /* void */; } count++; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Inacabado Posted February 1, 2018 at 08:59 AM Author Report #609185 Posted February 1, 2018 at 08:59 AM (edited) 33 minutos atrás, HappyHippyHippo disse: porque isto : if (ispunct(*str)); count++; é o mesmo que isto : if (ispunct(*str)) { /* void */; } count++; Que é o mesmo que isto (nesta função especifica): int punctCount(const char *str) { int count=0; while(*str) { count++; str++; } return count; } Afinal o count++ não está a condição de nada logo o if (isPunct(*str)), pode-se retirar. Acredita estava a tomar o pequeno almoço e ia postar porque tinha compreendido entreteanto a tua pergunta! Edited February 1, 2018 at 09:00 AM by Inacabado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now