• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bertolo

numero de linhas de uma matriz de strings problem basico mas insoluvel (atm xD)

10 mensagens neste tópico

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

int nr(char a[3][4]){
int i;
for(i=0;a[i][0]!='\0';i++)
;
return i;
}

int main (void){
char b[3][20];
int z;
strcpy(b[0],"oleaaaaaa");
strcpy(b[1],"sigaaaaaaa");
z=nr(b);
printf("%d\n",z);
return 0;
}

alguem me sabe dizer pq e que z=15 ou la o que da?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

alguem me sabe dizer pq e que z=15 ou la o que da?

Quando inicias o array, os valores deste vão ser aleatórios, logo no teu exemplo o valor de z vai variar de máquina para máquina. Para essa função funcionar correctamente, tens de inicializar todas as posições vazias com \0.

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

int nr(char a[][20])
{
int i;
for(i=0; a[i][0] != '\0'; i++)
	;

return i;
}

int main (void)
{
char b[3][20];
int z;

strcpy(b[0], "oleaaaaaa");
strcpy(b[1], "sigaaaaaaa");
strcpy(b[2], "");

z = nr(b);
printf("%d\n",z);

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pergunto-me sequer se isso funciona!! A assinatura da função: a[3][4] é de tipo diferente b[3][20]

E o que queres fazer com isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso funciona...nao interessa..thks triton...a maneira mais segura e ver pelo codigo asci se é numero maiuscula ou minuscula... []

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso funciona...nao interessa..thks triton...a maneira mais segura e ver pelo codigo asci se é numero maiuscula ou minuscula... []

Interessa sim, porque funciona... depende do compilador, é incorrecto. Coloca como o Triton fez.

Não percebi a segunda parte da frase!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol...tipo..as partes nao inicializadas vao ter caracteres aleatorios, se eu inicializar o  vector com \0 vai ficar tudo com \0 e depois modificar. mas todas as linhas nao inicializadas começam com \0, portanto eu basta ver se o primeiro caracter e caracter de escrita normal, senao for cheguei ao fim da matriz e devolvo o valor da linha

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É só para avisar que esse programa pode estourar caso a terceira string não esteja vazia.

A função nr devia ser modificada para receber o número de strings na matriz para terminar o ciclo for antes de tentar aceder a uma posição de memória que pode não ter sido alocada..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É só para avisar que esse programa pode estourar caso a terceira string não esteja vazia.

A função nr devia ser modificada para receber o número de strings na matriz para terminar o ciclo for antes de tentar aceder a uma posição de memória que pode não ter sido alocada..

A função pretende saber o número de strings existentes na matriz, não tem grande lógica a função receber o número de strings.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é para lhe passares o número de strings mas sim o máximo de strings da matriz, naquele caso 3.

Isto é o suficiente para crashar o programa:

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

int nr(char a[][20])
{
int i;
for(i=0; a[i][0] != '\0'; i++)
	;

return i;
}

int main (void)
{
char b[3][20];
int z;

strcpy(b[0], "oleaaaaaa");
strcpy(b[1], "sigaaaaaaa");
strcpy(b[2], "1");

z = nr(b);
printf("%d\n",z);

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

/*devolve numero de linhas de matriz de strings  com 8 caracteres*/
int numlinhas(char a[][8])
{
int i;
for(i=0;(a[i][0]<=122 && a[i][0]>=97) || (a[i][0]<=57 && a[i][0]>=48) || (a[i][0]<=90 && a[i][0]>=65);i++)
;
return i;
}

fiz assim e funciona :P thks na mm

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora