Um método em C não deve retornar um char*, a menos que você saiba o que está fazendo.
Ele normalmente deve copiar em um char*. Por exemplo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int musicas (int estilo, char *escolha) {
char *genero[] = { "pop", "rock", "mpb", "bossa nova" };
if (1 <= estilo && estilo <= sizeof (genero) / sizeof (genero[0])) {
strcpy (escolha, genero [estilo - 1]);
return 1;
}
return 0;
}
int main (int argc, char *argv[]) {
int opcao=0;
char escolha [32];
while (opcao != 0) {
puts ("ESTILOS DE MÚSICA: ");
puts ("1 - POP ");
puts ("2 - ROCK ");
puts ("3 - MPB ");
puts ("4 - BOSSA NOVA ");
puts ("Digite o estilo de música que você prefere, ou 0 para sair: ");
scanf ("%d", &opcao);
if (musicas (opcao, escolha)) {
printf ("Você escolheu: %s\n", escolha);
} else if (opcao != 0) {
puts ("Escolha errada (deve ser um numero de 1 a 4, ou 0 para sair)");
}
}
return (0);
}
Bom nunca iria funcionar pois você esta pedindo pra retornar um char mas deseja retornar um char* ou seja um cadeia de chars em outras palavras uma string.
Se estiver usando C++ utilize o tipo std::string que é o que você procura, em C não é possivel tratar strings sem utilizar ponteiros. Uma simples alteração resolve seu problema.
//Recebimento de inteiro e retornando string
#include <stdio.h>
#include <string.h>
char* musicas (int estilo)
{
char genero[4][11]={"pop", "rock", "mpb", "bossa nova"};
char* escolha = new char[15];
int i=0;
strcpy (escolha, genero[estilo-1]);
return(escolha);
}
int main()
{
int opcao=0;
printf ("\nESTILOS DE MÚSICA:\n");
printf ("1 - POP ");
printf ("1 - ROCK ");
printf ("1 - MPB ");
printf ("1 - BOSSA NOVA ");
printf ("\nDigite o estilo de música que você prefere: ");
scanf ("%d", &opcao);
printf ("\nVocê escolheu: %s\n", musicas(opcao));
return(0);
}
Como esta usando o stdlib (eu tirei pq não é necessario) creio que esta usando C++ certo ? Então use o std::string.
Abraços.
ps: enantiomero eu não entendi a parte do sizeof ali em cima, procure apresentar legibilidade no código e C++ não é C é só uma dica quando usar C++ use apenas funções C++, deixe C de lado.
[quote=rsaforuns]Estou aprendendo C e o que seria “using namespace std”
Posso retornar string, em um método?
[/quote]
using namespace std;
Você precisa usar isto sempre que for usar o tipo string.
Em suma um namespace é para resolver possíveis conflitos de nomenclatura.
Namespace serve para separar suas funções ou de outras libs das demais libs, tipo você pode ter uma função chamada puts(char*) e estar usando o puts(char*) do stdio ai ele não sabe qual função chamar, assim pra não acontecer o mesmo com as funções do std você tme de declarar quais conjuntos de funções ira usar, neste caso o std;
Só use todo um namespace quando for usar diversas vezes funções inerentes aquele namespace. Se não um std::funcao ja funciona e aumenta um pouco a performance.
Abraço.
ps: Espero ter explicado direito, caso não esteja muito claro e você ainda esta começando em programação deixe pra estudar sobre isso um pouco mais frente, quando aprender resolução de escopo essas coisas.
int main()
{
int opcao=0;
printf ("\nESTILOS DE MÚSICA:\n");
printf ("1 - POP ");
printf (“1 - ROCK “);
printf (“1 - MPB “);
printf (“1 - BOSSA NOVA “);
printf (”\nDigite o estilo de música que você prefere: “);
scanf (”%d”, &opcao);
printf (”\nVocê escolheu: %s\n”, musicas(opcao));
printf (”\n”);
system (“pause”);
return(0);
}
[\code]
Estou utilizando C e não C++.
Está apresentando erro na seguinte linha:
char* escolha = new char[15];
Erro: ‘new’ undeclared (first use in this function)