Wesser, il 08 ottobre 2013 - 12:05 ha detto:
Tralasciando l'algoritmo (attualmente incompleto) opinabile che hai in mente, l'argomento j della procedura elaborazione dev'essere un intero, non un puntatore ad un intero. Non ti serve passare il suo riferimento se non svolgi nessuna operazione di ritorno, per cui hai bisogno di passare il valore dell'indice piuttosto che il suo puntatore (o riferimento o indirizzo di memoria). In definitiva, elimina l'asterisco.
Purtroppo, l'errore è un po' vario. Il compilatore che usi potrebbe permettere di utilizzare un puntatore come indice di un array, poiché un puntatore è pur sempre un valore. L'unico errore di sintassi che intravedo è l'utilizzo di valore come array unidimensionale (valore[ j ]) anziché bidimensionale (array[ j ][ i ]) come da dichiarazione e/o definizione (array[ j ][ 10 ]). Non vedo l'utilità di dichiararlo come array bidimensionale a differenza di parole, essendo un array di stringhe e quindi un array di un array di caratteri. Inoltre, evita di assegnare una variabile come indice di un array in fase di dichiarazione, perché secondo gli standard le dimensioni devono essere costanti maggiori di 0. Nel tuo codice, j mantiene un valore pari a 0 che non è valido per impostare una dimensione appropriata.
Si, me ne sono accorto, sono un attimino arrugginito e ho fatto caso dopo che J lo passo come un puntatore. Sistemo e faccio sapere grazie del consiglio!
EDIT:
ho aggiornato e rivisto il codice e finalmente l'errore è scomparso, poi "valore" l'ho fatto diventare unidimensionale, visto che per quello che vorrei farci è inutile un bidimensionale. A questo punto avevo due strade: o fare un #define o creare una dimensione fissa. Per semplicità ho scelto la seconda strada. Purtroppo ora mi crasha (pincopallo ha smesso di funzionare ecc..) ma non riesco a venirne a capo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void elaborazione (char*parole,int j,int*valore)
{
valore[j]=strlen(parole[j]);
printf("%d",j);
printf("%d",valore[j]);
}
int main()
{
int j=0, i=0;
char parole[100][50];
int valore[100];
printf("Questo programma permette di ordinare delle parole in base alla lunghezza\n");
do
{
printf("inserisci una parola, per terminare scrivere 'exit': ");
gets (parole[j]);
fflush(stdin);
elaborazione(parole,j,valore);
if(strcmp(parole[j],"exit")!=0)
{
j++;
}
/*
printf("----->%s\n",parole[j]);
printf("----->precedente: %s\n",parole[i]);
i++;
*/
} while(strcmp(parole[j],"exit")!=0);
}
come compilatore uso Mingw abbinato a Codeblocks
Messaggio modificato da mattez il 08 ottobre 2013 - 17:31