Jump to content

Recommended Posts

Posted (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 by thoga31
GeSHi
Posted

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!

  • Vote 1

Knowledge is free!

Posted

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á

Posted

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
  • Vote 1

Knowledge is free!

Posted (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 by thoga31
GeSHi
Posted (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 by HappyHippyHippo
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.