parra1100 Posted February 7, 2014 at 09:34 PM Report #544418 Posted February 7, 2014 at 09:34 PM (edited) O problema é este: Desenvolva uma função que receba um carácter passado como argumento, e, caso esse carácter seja uma vogal, devolva a sua ordem ('a', 'A' têm ordem 1, enquanto que 'u', 'U' têm ordem 5). Se o carácter não for uma vogal deve ser devolvido 0. O código que tenho é este: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int funcao (char car) { car=tolower(car); switch (car) { case 'a': return 1; case 'e': return 2; case 'i': return 3; case 'o': return 4; case 'u': return 5; default: return 0; } } void main() { char car; int res; printf_s("Insira um carater"); scanf_s("%s",&car); res=funcao(car); printf("%d",res); system("pause"); } sei que o problema não está na função, pois na função principal tinha isto: void main() { printf("%d",funcao('e'); system("pause"); } e dava muito bem, mas quando tento ler a string não dá. Sei que é um problema básico, mas preciso de uma ajudinha. Edited February 7, 2014 at 09:37 PM by thoga31 GeSHi
thoga31 Posted February 7, 2014 at 09:39 PM Report #544420 Posted February 7, 2014 at 09:39 PM char car; scanf_s("%s",&car); Pois, o problema está no main, tens razão. "car" é um char, e tu estás a ler como se fosse uma string. Obviamente que isto não vai dar bom resultado. Como se lê um caracter? Atenção que não estás a ler nenhuma string, estás a confundir as duas coisas! 1 Report Knowledge is free!
parra1100 Posted February 7, 2014 at 09:46 PM Author Report #544422 Posted February 7, 2014 at 09:46 PM Pois, o problema está no main, tens razão. "car" é um char, e tu estás a ler como se fosse uma string. Obviamente que isto não vai dar bom resultado. Como se lê um caracter? Atenção que não estás a ler nenhuma string, estás a confundir as duas coisas! %c, certo? Mudei, mas mesmo assim não dá
thoga31 Posted February 7, 2014 at 09:57 PM Report #544426 Posted February 7, 2014 at 09:57 PM Tens de ter cuidado com a leitura de dados deste tipo, quando tu inseres um caracter e primes Enter, vais ficar com o caracter e com o Enter no buffer. Tens duas opções para ler o caracter: scanf(" %c", &c); // repara no espaço antes do "%c" - indica que deve ignorar caracteres como o Enter c = getchar(); // opção mais apropriada 1 Report Knowledge is free!
parra1100 Posted February 7, 2014 at 10:04 PM Author Report #544427 Posted February 7, 2014 at 10:04 PM (edited) ok, muito obrigado, já não me lembrava do getchar. Código final: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int funcao (char car) { car=tolower(car); switch (car) { case 'a': return 1; case 'e': return 2; case 'i': return 3; case 'o': return 4; case 'u': return 5; default: return 0; } } void main() { char car; int res; printf_s("Insira um carater"); car=getchar(); res=funcao(car); printf("%d",res); system("pause"); } Edited February 7, 2014 at 10:15 PM by thoga31 GeSHi
HappyHippyHippo Posted February 7, 2014 at 11:09 PM Report #544439 Posted February 7, 2014 at 11:09 PM (edited) bem mais simples do que isso ... #include <stdio.h> #include <stdlib.h> #include <string.h> int funcao (char car) { char * pos = NULL; return (pos = strchr("aeiou", car)) == NULL ? 0 : pos - "aeiou" + 1; } int main() { printf("Insira um carater : "); fflush(stdout); printf("val = %d\n", funcao(getchar())); return 0; } Edited February 7, 2014 at 11:10 PM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
parra1100 Posted February 8, 2014 at 11:38 PM Author Report #544504 Posted February 8, 2014 at 11:38 PM como ainda estou em introdução à programação, desconhecia algumas dessas funções
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