Antwoord
Antwoord

Reputation: 17

when compiling I get this error, I do not know what is wrong

I'm passing a matrix to a text file

Code:

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  


int llenarMatriz() {   
    int matriz[3][3]={1,2,3,4,5,6,7,8,9};   
    return matriz[3][3]; 
}


void guardarMatriz(int matriz[3][3]) {  
    char direccion[]="C:\\Users\\Usuario\\Desktop\\DIBU.txt";  
    FILE *archivo = fopen(direccion, "w");  
    if (archivo == NULL) {  
        exit(EXIT_FAILURE);  
    }  
    char linea[20];  
    sprintf(linea, "%d %d\n", 3, 3);  
    fputs(linea, archivo);  
    for (int i = 0; i < 3; i++) {  
        linea[0] = '\0';  
        for (int j = 0; j < 3; j++){  
            char buffer[10];  
            sprintf(buffer, "%d ", matriz[3][3]);  
            strcat(linea, buffer);  
        }  
        int len = strlen(linea);  
        linea[len - 1] = '\n';  
        fputs(linea,archivo);  
    }  
    fclose(archivo);  
}    
int main() {  
    llenarMatriz();  
    guardarMatriz(int matriz[3][3]);  
    system("pause");  
    return 0;  
}  

Error message;

In function 'main':  
error: expected expression before 'int'  
  guardarMatriz(int matriz[3][3]);

Upvotes: 0

Views: 40

Answers (2)

David Ranieri
David Ranieri

Reputation: 41036

guardarMatriz(int matriz[3][3]);

Don't include the type and the dimensions when passing parameters to a function.

Also, when you call a function returning something, you should use the correct type (an int is not able to return a 2D array of int), and you must store the return somewhere.

In this case you can return a compound literal:

void *llenarMatriz(void)
{    
    return (int [][3]){{1,2,3},{4,5,6},{7,8,9}}; 
}

and in main:

int main(void) /* void is the correct argument for `main` */
{
    int (*matriz)[3] = llenarMatriz(); /* A pointer to an array of int 3 */

    guardarMatriz(matriz);  
    system("pause");  
    return 0;  
} 

If you don't want to declare the array inside main you can use the result of the first function as the argument of the second one:

guardarMatriz(llenarMatriz());  

or you can pass the compound literal directly:

guardarMatriz((int [][3]){{1,2,3},{4,5,6},{7,8,9}});  

Upvotes: 0

bruceg
bruceg

Reputation: 2513

You have two problems in your code. First you don't initialize a 2-D array correctly. It should look like this:

int matriz[3][3]={{1,2,3},{4,5,6},{7,8,9}};

second, you don't pass a type name to the function call to declare your variable, so it should look like this:

    int matriz[3][3];
    llenarMatriz();
    guardarMatriz(matriz);

Upvotes: 1

Related Questions