Bonsoir,
Mon programme se bloque ici:i=disco(arch0,dim,dim,1,cr,4);
Avec cet erreur:
cannot convert `float*' to `char*' for argument `5' to `int disco(char*, int, int, int, char*, int)'
Je dois utiliser char*,dans le paramètre 5,tandis que j'ai la variable cr comme float*.
Est ce qu'il y a une solution pour que je garde char* et en même temps prendre l'information qui arrive de float.sinon comment je ferai pour résoudre cet erreur?
#include <math.h> #include <stdio.h> #include <stdlib.h> int disco (char fichero[], int nfil, int ncol, int control,char *a, int tipo); int main(void) { long int n2,kk,k,ll,ii,jj,nn,coorx,coory; int dim,i; char arch0[30], arch1[30]; float *ct,*cr; float vmax; printf("\n\ dimension du fichier:"); scanf("%d",&dim); n2 = (long)dim * (long)dim ; ct = (float*)calloc(n2, sizeof(float)); cr = (float*)calloc(n2, sizeof(float)); if ( cr == NULL || ct == NULL ) { printf ( "\n Memory error."); exit(0); } printf("\n\n Introduire Cross-correlation matrice:"); scanf("%s",arch0); i=disco(arch0,dim,dim,1,cr,4); if (i!=1) goto fin; printf("\n\n Introduire la matrice a translat‚:"); scanf("%s",arch1); i=disco(arch1,dim,dim,1,ct,4); if (i!=1) goto fin; vmax=cr[0]; for (ii=0; ii < dim; ii++) { ll =(long)dim * (long)ii; for (jj=0; jj < dim; jj++) { nn=ll+jj; if( cr[nn] > vmax ) { vmax = cr[nn]; coorx = ii; coory = jj; } } } for ( kk=0 ; kk < n2 ; kk++) { cr[kk] = 0; } coorx = coorx - dim/2; coory = coory - dim/2; for (ii=abs(coorx); ii < dim-abs(coorx); ii++) { ll =(long)dim * (long)ii; for (jj=abs(coory); jj < dim-abs(coory); jj++) { cr[(long)dim*(ii-coorx)+jj-coory]= ct[(long)dim * (long)ii+jj]; } } printf("\n\nIntroduire le nom de la matrice centr‚:"); scanf("%s",arch1); i=disco(arch1,dim,dim,2,cr,4); if (i!=1) goto fin; fin: free(cr); free(ct); return 0 ; } /*********************************************************************\ * * * * * DISCO.C * * ======= * * * * Rutina para trasladar n£meros de cualquier tipo desde * * una variable de la memoria a un disco o de un disco * * a una variable de la memoria. * * * * --------- * * * * Par metros: * * * * fichero - Nombre del fichero del disco. * * nfil, ncol - N£mero de filas y columnas. * * control - 1 para leer del fichero. * * 2 para grabar en el fichero. * * a - puntero que indica la variable. * * tipo - n§ de bytes por elemento de la variable. * * * * * \*********************************************************************/ int disco (char fichero[], int nfil, int ncol, int control,char *a, int tipo) { long int n, cont, ng; int unidad, j, cociente, resto; if (control == 1) { if ((unidad = open (fichero,1)) == -1) { return (-1); } cont = (long) nfil * (long) ncol * tipo; resto = cont % 32768; cociente = cont / 32768; for (j = 0, n = 0; j < cociente; j++,n += 32768) _read (unidad, &a[n], 32768); _read (unidad, &a[n], resto); close (unidad); return 1; } if (control == 2) { if ((unidad = creat (fichero, 200)) == -1) { return -1; } cont = (long) nfil * (long) ncol * tipo; resto = cont % 32768; cociente = cont / 32768; ng = 0; for (j = 0, n = 0; j < cociente; j++, n += 32768) ng = ng + (unsigned) _write (unidad, &a[n], 32768); ng = ng + (unsigned) _write (unidad, &a[n], resto); if (ng != cont) { return 0; } close (unidad); return 1; } return 0; }
Bonjour,
Plutôt que dire que le programme se bloque, je pense qu'il ne compile pas
Regarde la fonction sprintf pour générer une chaine (char *) à partir de ton float