Jump to content

Apontadores de vetores com mais de uma dimensão?


killezio
 Share

Recommended Posts

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

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 by pwseo
syntax highlight.
Link to comment
Share on other sites

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 by thoga31
GeSHi
Link to comment
Share on other sites

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

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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

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

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

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
 Share

×
×
  • 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.