Tud'a Monte
http://www.tudamonte.com/phpBB/

[ Programação ] C#
http://www.tudamonte.com/phpBB/viewtopic.php?f=3&t=143
Page 1 of 2

Author:  G3nn [ 10 Mar 2009, 20:00 ]
Post subject:  [ Programação ] C#

preciso aqui de uma pequena ajuda em C#... 8(

Spoiler: show
#include <stdio.h>
#include <string.h>

typedef struct{
char nome[20];
int n_jogos, g_m, g_s, pontos;
} Equipa;

Equipa Tabela[16];
int n = 0;


Spoiler: show
int LE_TABELA_DO_FICHEIRO(){

Equipa e;
FILE *fp = fopen("tabela.dat", "r");

while(1){
fgets(e.nome, 64, fp);
e.nome[strlen(e.nome - 1)] = 0;
fscanf(fp, "%d %d %d %d", &(e.n_jogos), &(e.g_m), &(e.g_s), &(e.pontos));
Tabela[n] = e;
n++;
if(feof(fp)) break;
}

return n;
}


Spoiler: show
MOSTRA_EQUIPAS(int n){

int i;
for(i = 0; i < n; i++){
printf("%s%d %d %d %d\n", Tabela[i].nome, Tabela[i].n_jogos, Tabela[i].g_m, Tabela[i].g_s, Tabela[i].pontos);
}
}


o ficheiro tabela.dat tem lá escrito o seguinte:

Quote:
Benfica
0 0 0 0
Sporting
1 2 3 4
Guimarães
0 0 0 0


pergunta: pq é q no main quando eu chamo as funções LER_TABELA_DO_FICHEIRO() e a MOSTRA_EQUIPAS(n), o resultado é...

Quote:
Benfica
0 0 0 0

0 0 0 0
Sporting
1 2 3 4

1 2 3 4
Guimarães
0 0 0 0

0 0 0 0


...? :(

meti as funções dentro dos spoilers para ser mais fácil a leitura ;)

Author:  wodahSShadow [ 10 Mar 2009, 20:06 ]
Post subject:  Re: [ Programação ] C#

Tens de mudar a cor no spoiler, branco no branco...

Author:  G3nn [ 10 Mar 2009, 20:29 ]
Post subject:  Re: [ Programação ] C#

Spoiler: show
#include <stdio.h>
#include <string.h>

typedef struct{
char nome[20];
int n_jogos, g_m, g_s, pontos;
} Equipa;

Equipa Tabela[16];
int n = 0;

Spoiler: show
int LE_TABELA_DO_FICHEIRO(){

Equipa e;
FILE *fp = fopen("tabela.dat", "r");

while(1){
fgets(e.nome, 64, fp);
e.nome[strlen(e.nome - 1)] = 0;
fscanf(fp, "%d %d %d %d", &(e.n_jogos), &(e.g_m), &(e.g_s), &(e.pontos));
Tabela[n] = e;
n++;
if(feof(fp)) break;
}

return n;
}

Spoiler: show
MOSTRA_EQUIPAS(int n){

int i;
for(i = 0; i < n; i++){
printf("%s%d %d %d %d\n", Tabela[i].nome, Tabela[i].n_jogos, Tabela[i].g_m, Tabela[i].g_s, Tabela[i].pontos);
}
}


então e agr? é q na 4poziom ñ me aparece branco no branco... 8(

Author:  CerebroHelado [ 10 Mar 2009, 23:17 ]
Post subject:  Re: [ Programação ] C#

Isso é C, não é C#. Uma das coisa que vejo é que o fscanf não "limpa" a quebra de linha nas linhas com os números. Substitui:
Quote:
fscanf(fp, "%d %d %d %d", &(e.n_jogos), &(e.g_m), &(e.g_s), &(e.pontos));
por
Quote:
fscanf(fp, "%d %d %d %d\n", &(e.n_jogos), &(e.g_m), &(e.g_s), &(e.pontos));

EDIT: No LE_TABELA tens:
Quote:
e.nome[strlen(e.nome - 1)] = 0;
, quando devia ser
Quote:
e.nome[strlen(e.nome) -1] = 0;

2nd EDIT: Finalmente no MOSTRA_EQUIPAS tens:
Quote:
printf("%s%d %d %d %d\n", Tabela[i].nome, Tabela[i].n_jogos, Tabela[i].g_m, Tabela[i].g_s, Tabela[i].pontos);
, devias pôr uma quebra de linha depois do nome:
Quote:
printf("%s\n%d %d %d %d\n", Tabela[i].nome, Tabela[i].n_jogos, Tabela[i].g_m, Tabela[i].g_s, Tabela[i].pontos);

Author:  G3nn [ 10 Mar 2009, 23:24 ]
Post subject:  Re: [ Programação ] C#

obrigado, já experimento :P alguém q mude o nome do tópico sff ;)

Author:  G3nn [ 11 Mar 2009, 20:22 ]
Post subject:  Re: [ Programação ] C#

Quote:
/tmp/ccOpOJ0R.o: In function `main':
wtv.c:(.text+0x2f): warning: the `gets' function is dangerous and should not be used.


...? :O

Author:  b0ktai [ 11 Mar 2009, 20:25 ]
Post subject:  Re: [ Programação ] C#

Pelo que percebo da função gets é que ela te deixa ler mais bytes do que aqueles que alocaste. Isso pode levar a corrupção de memória, que mesmo ao passar por essa instrução quando correres o programa pode não dar erro, mas pode te estoirar noutro ponto qualquer do programa. É por isso que é "perigosa".

## EDIT ##

Usa a fgets().

Author:  Cenotaph [ 12 Mar 2009, 00:56 ]
Post subject:  Re: [ Programação ] C#

O mítico perigo da função gets(), o que me ri da primeira vez q me aconteceu. Pá, a realidade é esta: se usas a função gets() mts vezes, recebes um telefona a dizer que vais morrer dentro de 7 dias. Dps sai uma menina da televisão e mata-te.

Ou então é só pq pode ser facilmente explorada devido à sua implementação e a unica razão pela qual ainda é suportada é por razoes de compatibilidade.

Author:  CerebroHelado [ 12 Mar 2009, 01:31 ]
Post subject:  Re: [ Programação ] C#

Yap, é giro correr shellcodes em programas com permissão de root usando essas funções :P
Btw, outra do género é a strcpy.

Author:  G3nn [ 12 Mar 2009, 21:50 ]
Post subject:  Re: [ Programação ] C#

Cenotaph já recebi o telefonema :(

Page 1 of 2 All times are UTC [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/