Jump to content
Sign in to follow this  
shenzi

Alocação dinamica

Recommended Posts

shenzi

Bom dia a todos,

Eu estou a desenvolver um projecto para comparar vários números.

Para isso o utilizador insere primeiro o numero de strings que vai inserir e depois insere por linha os números.

A parte de inserir o numero de linhas foi fácil xD

int linhas;
printf("\nDigite o numero de linhas: ");
scanf("%d",&linhas);

Neste exercício o limite máximo de caracteres é 50, portante definir logo

colunas=50;

O meu problema é a definir a matriz dinamicamente.

Eu já tenho este código feito:

int **matriz;
matriz=(int**) malloc( linhas * sizeof( int** ) );//aloca as linhas
for(i=0;i<linhas;i++)
{
	matriz[ i ]=(int*) malloc( colunas * sizeof( int* ) );//aloca as colunas
	for (j=0; j<colunas; j++)
	{
		matriz[i][j] = (int) malloc(sizeof(int));
	}
}

for(i=0;i<linhas;i++)
{	
	printf("\nDigite a string: ");
	scanf("%d",matriz[i]);
}

Depois de definir e meter valores na matriz, o programa deve juntar todas as strings numa para isso fiz este código:

int aux[150];
for(i=0;i<linhas;i++)
{	
	strcat(matriz[i],aux);
}
printf("\nString: %d ",aux);

Eu gostava de saber onde está o meu erro pois o programa não me dá valores

Share this post


Link to post
Share on other sites
Localhost

A ordem com que passas os argumentos para a função strcat está trocada.

Deveria ser: strcat (aux, matriz[ i ]);.


here since 2009

Share this post


Link to post
Share on other sites
Surtr
int **matriz;
[b]matriz=(int**) malloc( linhas * sizeof( int* ) );[/b]//aloca as linhas (o argumento do sizeof estava mal)
        for(i=0;i<linhas;i++)
        {
[b]                matriz[ i ]=(int*) malloc( colunas * sizeof( int ) )[/b];//aloca as colunas (o argumento do sizeof estava mal)
              [b]  for (j=0; j<colunas; j++)
                {
                        matriz[i][j] = (int) malloc(sizeof(int));[/b] //este ciclo está a mais, o malloc no cilo acima já aloca espaço para um array de "colunas" posições, se te queres certificar que estão a zero, usa o calloc
                }
        }

        for(i=0;i<linhas;i++)
        {        
                printf("\nDigite a string: ");
                scanf("%d",matriz[i]);
        }

Share this post


Link to post
Share on other sites
shenzi

Muito obrigado pela ajuda, pronto agora já consigo ver os valores da matriz, o problema é que com isto:

	for(i=0;i<linhas;i++)
{	
	printf("\nDigite a string: ");
	scanf("%d",matriz[i]);
}

só meto os valores na coluna 0 e na linha i não um valor por coluna como desejaria, mas eu para fazer um ciclo para as colunas também como detecto para ele colocar os valores até encontrar o \n? e assim mudar de linha?

Share this post


Link to post
Share on other sites
Surtr

Arrays de inteiros não têm \n nem \0, simplesmente escreves até chegares ao índice "colunas". O que podes fazer é, em vez de leres ints, lês chars, e assim, quando for para mudar de linha, lês um char especial, enquanto não for lido, lês normalmente e usas a função atoi para converter chars em ints.

Share this post


Link to post
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
Sign in to follow this  

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