Cipla 0 Denunciar post Postado Julho 23, 2008 Pessoal, sou novo no forum, e programo há 1 ano mais ou menos. Estou tentando fazer um programa que toque musicas através da função Beep(nota,tempo) que encontrei há pouco na internet. Só que quando tento implementar uma função que importa uma musica de um arquivo, na hora do retorno dessa função dá um erro. O código a seguir: // principal.c #include "funcoes.h" #include <stdio.h> #include <stdlib.h> int main() { notas music[MAX]; int esc; for (;; ) { printf("TOCAR MUSICA (1)\n"); printf("IMPORTAR MUSICA DE ARQUIVO (2)\n"); printf("EXPORTAR MUSICA PARA ARQUIVO (3)\n"); printf("SAIR (4)\n"); printf("Digite sua escolha: "); scanf("%d",&esc); switch(esc) { case 1: tocamus(music); break; case 2: music = importamus(); break; case 3: exportamus(music); break; case 4: exit(1); break; default: printf("Valor invalido."); break; } } } //funcoes.h #define MAX 100 typedef struct { int hertz; int tempo; }notas; notas *importamus(void); void tocamus(notas musica[]); void exportamus(notas musica[]); //funcoes.c #include "funcoes.h" #include <stdio.h> #include <stdlib.h> notas *importamus(void) { int i=0; notas musica[MAX]; char arq[MAX]; char nota[MAX]; char temp[MAX]; FILE *fp; printf("Digite o nome do arquivo: "); scanf("%s",&arq); if((fp=fopen(arq, "r")) == NULL) { printf("Erro ao acessar o arquivo %s\n",arq); system("PAUSE"); } while (!feof(fp)) { fgets(nota, MAX, fp); musica[i].hertz=atoi(nota); fgets(temp, MAX, fp); musica[i].tempo=atoi(temp); i++; } fclose(fp); return musica; } void tocamus(notas musica[]) { } void exportamus(notas musica[]) { } O erro que dá aqui é o seguinte: in function "int main": 23 - incompatible types in assignment of 'notas' to 'notas[100]' Já tentei mudar parametros, adicionar ponteiro, tirar ponteiro, tudo mais, alguem poderia me ajudar? desde já agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Julho 23, 2008 Vou sugerir uma gambiarrazinha que pode funcionar: Porque não passa um ponteiro para o music para a função e define o objeto por lá mesmo utilizando o ponteiro que foi passado por parâmetro? void *importamus(notas musica[]) { int i=0; char arq[MAX]; char nota[MAX]; char temp[MAX]; FILE *fp; printf("Digite o nome do arquivo: "); scanf("%s",&arq); if((fp=fopen(arq, "r")) == NULL) { printf("Erro ao acessar o arquivo %s\n",arq); system("PAUSE"); } while (!feof(fp)) { fgets(nota, MAX, fp); musica[i].hertz=atoi(nota); fgets(temp, MAX, fp); musica[i].tempo=atoi(temp); i++; } fclose(fp); } case 2: importamus(&music); break; Compartilhar este post Link para o post Compartilhar em outros sites
Cipla 0 Denunciar post Postado Julho 23, 2008 José, fiz o que você falou, passei a matriz como argumento para a função importamus, e modifiquei a importamus como você falou, mas alí no "case 2: importamus(&music)" tive que tirar o "&" para funcionar agora parece estar funcionando direito. essas passagens de parâmetros me deixam nervoso heauheauheauheau prq será que o meu "music = importamus()" não funciona ali? Obrigado pela ajuda =D Compartilhar este post Link para o post Compartilhar em outros sites
Cipla 0 Denunciar post Postado Julho 23, 2008 Terminei as funções exportamus e tocamus sem problema, estou postando o resultado final do meu programa com um exemplo de música (nirvana-come as you are =p) para acrescentar ao fórum. quem estiver aprendendo programa que manipula structs, arquivos e sons em C pode baixar pra dar uma olhada no link: http://rapidshare.com/files/131951660/notasmusicais.rar.html são apenas códigos fonte e um .txt obs: desculpa se não é permitido postar arquivos externos Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Julho 24, 2008 Não não são permitidos arquivos externos e você será visitado pelo FBI dentro de algumas horas e deverá dar algumas explicações e ficará sendo vigiado por 20 anos. Tô brincando, claro que pode, acho até jóia isso porque ajuda as pessoas que tão tentando aprender sobre o bagulho e não sabem por onde começar :D Compartilhar este post Link para o post Compartilhar em outros sites