In the C language, I cannot work properly with a matrix

Asked

Viewed 110 times

1

Hello. In a college project to automate the process of end-to-end encryption, I encountered some problems when dealing with matrices.
NOTE: Sorry for code formatting errors. I still haven’t got the hang of it.

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


int main()

{
    //Variaveis
    long int tamanhoM1=0, //Variavel de controle do tamanho da 'matriz1'
        linha=0,          //Variavel para percorrer a 'matriz1'
        coluna=0,         //Variavel para percorrer a 'matriz1'
        x=0,              //Variavel para pecorrer o vetor 'fraseOriginal'
        matrizCodificada[tamanhoM1][tamanhoM1]; //Onde iremos codificar em ASCII nossa 'matriz1'
unsigned char fraseOriginal[x],
    matriz1[tamanhoM1][tamanhoM1];


   //Codigo
    printf("Digite o tamanho da matriz COM LETRAS E ESPAÇOS\n");
    printf("Na duvida,ponha um tamanho maior que será completado com espaços\n");
    scanf("%i",&tamanhoM1);

    printf("Digite a sua frase:\n");
   while ( x != pow(tamanhoM1,2)) //O laço vai ler do teclado um caractere até que encontre o quadrado do 'tamanhoM1'
{                             //Pois uma matriz 2x2 cabe 2^2=4 elementos
    fraseOriginal[x]=getche(); //Guarda na posição x um caractere
    x+=1;

}

x=0;  //Zera o X para percorrer o vetor do começo
printf("\n");

printf("Sua matriz é:\n");
   for (linha=0; linha < tamanhoM1; linha++)  //For aninhados para transformar o vetor 'fraseOriginal' em uma matriz 'matriz1'
{
    printf("\n");  //Quebra a linha
    for(coluna=0; coluna < tamanhoM1; coluna++)
    {
        matriz1[linha][coluna]= fraseOriginal[x];  //A matriz recebe o valor da posição do vetor de forma que percorre o vetor inteiramente

       x+=1;
       printf("%3c",matriz1[linha][coluna]);  //Impressao dentro do mesmo for pois quando se é feita fora do mesmo encontra-se erro


    }

}
printf("\nSua matriz codificada e:\n");

 for (linha=0; linha < tamanhoM1; linha++) //For para transformar a matriz de caractere para char(codigo ASCII)
{
    printf("\n");  //Teste de impressão
    for(coluna=0; coluna < tamanhoM1; coluna++)
    {
        matrizCodificada[linha][coluna]=matriz1[linha][coluna];
       printf("%5i",matrizCodificada[linha][coluna]);  //Impressão da matriz em codigo ASCII que encontra erro


    }

}


return 0;  //Fim
}

When running the program, I get the following result:

Digite o tamanho da matriz COM LETRAS E ESPACOS
Na duvida,ponha um tamanho maior que serß completado com espaþos
2
Digite a sua frase:
ab c

Sua matriz Ú:

  a b
    c

Sua matriz codificada e:

   32    0
   32    0

The result found in the final matrix is wrong, because the expected is:

97   98
32   99

What could be wrong? I’m mistakenly manipulating the matrix?
Grateful from now on.

  • A tip: Create your code beforehand and to put it in the OS question editor simply select all the text and apply a tab to it before copying it (in most current editors Ctrl+A followed by Tab). When you paste the code into your question it will already be identified as a code snippet and will have the same original formatting.

1 answer

0


You cannot define arrays with zero elements; neither with constant values (in C89), nor with VLA (in C99).

char a1[0]; // declaracao C89 (C99, C11) invalida

int size = 0;
char a2[size]; // declaracao C99 (C11) invalida

Ve the Standard C11 6.7.6.2 (in English, the translation is mine).

Q1: [For fixed arrays] If the expression is a constant, it must have a value greater than zero.

P5: [For Vlas] each time the expression that defines the size of the array is calculated must have a value greater than zero.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.