killezio Posted January 16, 2016 at 08:39 PM Report Share #592080 Posted January 16, 2016 at 08:39 PM eu quero enviar para uma função um vetor de duas dimensoes para este o receber como apontador. no entanto quando eu, dentro da função, faço uso do vetor o compilador dá-me um erro. estou a fazer alguma coisa mal? como posso trabalhar com isto? eis o que o compilador me diz ao fazer o que está em cima: resposta2.c:55:17: error: subscripted value is not an array, pointer, or vector vector[word][letter] = ch; Link to comment Share on other sites More sharing options...
pwseo Posted January 16, 2016 at 08:49 PM Report Share #592081 Posted January 16, 2016 at 08:49 PM killezio, É importante sabermos como estás a invocar a função e como esta foi definida. É difícil interpretarmos um diagnóstico do compilador sem termos um contexto. Link to comment Share on other sites More sharing options...
killezio Posted January 16, 2016 at 09:35 PM Author Report Share #592084 Posted January 16, 2016 at 09:35 PM (edited) desculpa, aqui está a função void palavrasPorLinha(FILE *read,char *vector,char *counter){ short int keepLooping = 1,word,letter; char ch; for (word = 0;keepLooping;word++) { for (letter = 0;keepLooping;letter++){ ch = fgetc(read); if (ch == '\n' || ch == ' '){ counter[1+word] = letter+1; if (ch == '\n'){ counter[0] = word + 1; keepLooping = 0; } } else vector[word][letter] = ch; } } } realmente não sei se é um problema meu ou é necessário trabalhar de uma forma diferente com apontadores para vetores de mais que uma dimensão e já agora o objetivo desta função é ler e gravar uma linha de um ficheiro de texto para o vetor "vector" e também gravar no vetor "counter" quantas palavras existem nessa linha e o tamanho de cada palavra Edited January 16, 2016 at 09:42 PM by pwseo syntax highlight. Link to comment Share on other sites More sharing options...
pwseo Posted January 16, 2016 at 09:44 PM Report Share #592085 Posted January 16, 2016 at 09:44 PM Se vector tem 2 dimensões, então não podes declará-lo como char *vector. Deverá ser char **vector. Caso contrário, o compilador pensa que estás a tentar aceder a um char como se fosse um array. Link to comment Share on other sites More sharing options...
tiago.f Posted January 16, 2016 at 09:59 PM Report Share #592087 Posted January 16, 2016 at 09:59 PM (edited) Olá killezio, acrescentando ao cometário do pwseo, se de facto queres uma função que conte o número de palavras por linha (como o nome indica), então acho que a tua não faz bem isso. Pelo que vejo, ela pára assim que encontra a primeira mudança de linha (o keepLooping é posto a zero). Acho que algo do género se aproxima mais do que queres: void palavrasPorLinha(FILE *read,short int *vector){ short int keepLooping = 1,word,line; char ch; word = 0; line = 0; while ((ch = fgetc(read)) != EOF) { if (ch == ' '){ word++; } if (ch == '\n'){ vector[++line] = word; word = 0; } } } onde, depois de correres a função, o teu vector fica algo do género: vector[1] = 15 //linha 1 tem 15 palavras (de facto ele conta os espaços. Poderás ter que refinar para contar palavras, mas como era o que vinha no teu exemplo...) vector[2] = 11 ... vector[n] = K Edited January 16, 2016 at 10:10 PM by thoga31 GeSHi Link to comment Share on other sites More sharing options...
killezio Posted January 16, 2016 at 10:37 PM Author Report Share #592088 Posted January 16, 2016 at 10:37 PM obrigado pelo código tiago.f. pela forma como tenho o meu código organizado não preciso necessariamente que o programa leia todas as linhas de uma vez, linha a linha, pois no main chamo a minha função dentro de uma loop. Mas o teu código é bastante simples e direto. e pwseo nao tinha pensado nisso obrigado pela ajuda Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 16, 2016 at 11:43 PM Report Share #592091 Posted January 16, 2016 at 11:43 PM (edited) Mas o teu código é bastante simples e direto. pois, mas está mal. ex de um ficheiro com dados que irá estoirar: palavra1 palavra2 palavra4? ps : isto para não falar noutros problemas ... Edited January 16, 2016 at 11:51 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
killezio Posted January 16, 2016 at 11:46 PM Author Report Share #592092 Posted January 16, 2016 at 11:46 PM entretanto descobri que existem vetores de apontadores. devo ir por aí ou há um caminho mais fácil. sinceramente nao consegui descobrir o que o pwseo queria dizer com usar um apontador de apontador como argumento da função Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 17, 2016 at 12:06 AM Report Share #592093 Posted January 17, 2016 at 12:06 AM se o objectivo é só contar o número de palavras, e tens o ciclo no main, então a assinatura da função seria só isto: int ler_linha_e_contar_palavras(FILE* fd) 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
tiago.f Posted January 17, 2016 at 12:32 AM Report Share #592095 Posted January 17, 2016 at 12:32 AM Agora fiquei curioso. Obviamente que o código tem vários problemas, o primeiro sendo que não conta palavras, mas espaços. Também nem sei se compila, não tenho compilador de C instalado....a ideia era mais demonstrar que a função não fazia o que o nome dizia, e como poderia eventualmente fazê-la... De qq modo, podes explicar porque vai estoirar? pois, mas está mal. ex de um ficheiro com dados que irá estoirar: palavra1 palavra2 palavra4? ps : isto para não falar noutros problemas ... Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 17, 2016 at 12:37 AM Report Share #592096 Posted January 17, 2016 at 12:37 AM De qq modo, podes explicar porque vai estoirar? além do problema de contar espaços em vez de palavras? não fazes qualquer tipo de validação/verificação do tamanho do vector em relação ao número de linhas que estás a ler do ficheiro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
tiago.f Posted January 17, 2016 at 12:58 AM Report Share #592097 Posted January 17, 2016 at 12:58 AM Portanto, 2 possíveis problemas que a questão original já trazia. Pensei que estoirasse com a frase que indicas... Killezio, obviamente deves sempre validar se o tamanho do teu vector é suficiente e alocar mais memória se não for... Para contares mesmo palavras (e não espaços) sugiro leres linha a linha (fgets) e usares a função strtok para partir a linha pelos vários espacos. Facilita bastante.... Boa sorte! além do problema de contar espaços em vez de palavras? não fazes qualquer tipo de validação/verificação do tamanho do vector em relação ao número de linhas que estás a ler do ficheiro Link to comment Share on other sites More sharing options...
killezio Posted January 17, 2016 at 12:48 PM Author Report Share #592102 Posted January 17, 2016 at 12:48 PM Para o que estou a fazer tenho mesmo que contar espaços. e já sei como resolver isto por isso obrigado pela ajuda! 1 Report Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 18, 2016 at 11:12 AM Report Share #592130 Posted January 18, 2016 at 11:12 AM Para o que estou a fazer tenho mesmo que contar espaços. e já sei como resolver isto por isso obrigado pela ajuda! disseram-te que não deves contar espaços, além de darem um exemplo em como isso não funciona. mas estás na boa, quem tem a nota no final do trabalho és tu ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
killezio Posted January 18, 2016 at 05:51 PM Author Report Share #592147 Posted January 18, 2016 at 05:51 PM disseram-te que não deves contar espaços, além de darem um exemplo em como isso não funciona. mas estás na boa, quem tem a nota no final do trabalho és tu ... estou a resolver um exercício do code jam, do que é que estás a falar?? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 18, 2016 at 09:00 PM Report Share #592150 Posted January 18, 2016 at 09:00 PM estou a resolver um exercício do code jam, do que é que estás a falar?? e já agora o objetivo desta função é ler e gravar uma linha de um ficheiro de texto para o vetor "vector" e também gravar no vetor "counter" quantas palavras existem nessa linha e o tamanho de cada palavra ex de um ficheiro com dados que irá estoirar: palavra1 palavra2 palavra4? Para o que estou a fazer tenho mesmo que contar espaços. e já sei como resolver isto por isso obrigado pela ajuda! disseram-te que não deves contar espaços, além de darem um exemplo em como isso não funciona. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
killezio Posted January 27, 2016 at 04:33 PM Author Report Share #592635 Posted January 27, 2016 at 04:33 PM devo contar espaços porque é exatamente isso que o exercício pedia 😛 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 27, 2016 at 05:34 PM Report Share #592673 Posted January 27, 2016 at 05:34 PM devo contar espaços porque é exatamente isso que o exercício pedia 😛 como queiras IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
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