All times are UTC [ DST ]




Post new topic Reply to topic  [ 11 posts ]  Go to page 1, 2  Next
  Print view

[ Programação ] C#
Author Message
PostPosted: 10 Mar 2009, 20:00 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 14 Jan 2009, 16:00
Posts: 3679
Location: Lisboa
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 ;)


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 10 Mar 2009, 20:06 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 13 Jan 2009, 18:37
Posts: 2662
Location: atrás de ti
Tens de mudar a cor no spoiler, branco no branco...

_________________
Image


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 10 Mar 2009, 20:29 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 14 Jan 2009, 16:00
Posts: 3679
Location: Lisboa
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(


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 10 Mar 2009, 23:17 
Chuck Norris
Chuck Norris
Offline

Joined: 12 Jan 2009, 00:49
Posts: 2040
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);


Last edited by CerebroHelado on 10 Mar 2009, 23:25, edited 1 time in total.

Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 10 Mar 2009, 23:24 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 14 Jan 2009, 16:00
Posts: 3679
Location: Lisboa
obrigado, já experimento :P alguém q mude o nome do tópico sff ;)


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 11 Mar 2009, 20:22 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 14 Jan 2009, 16:00
Posts: 3679
Location: Lisboa
Quote:
/tmp/ccOpOJ0R.o: In function `main':
wtv.c:(.text+0x2f): warning: the `gets' function is dangerous and should not be used.


...? :O


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 11 Mar 2009, 20:25 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 26 Jan 2009, 10:10
Posts: 2169
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().


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 12 Mar 2009, 00:56 
Chuck Norris
Chuck Norris
Offline

Joined: 14 Jan 2009, 15:35
Posts: 3648
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.


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 12 Mar 2009, 01:31 
Chuck Norris
Chuck Norris
Offline

Joined: 12 Jan 2009, 00:49
Posts: 2040
Yap, é giro correr shellcodes em programas com permissão de root usando essas funções :P
Btw, outra do género é a strcpy.


Top
 Profile  
Reply with quote  

Re: [ Programação ] C#
PostPosted: 12 Mar 2009, 21:50 
Chuck Norris
Chuck Norris
User avatar
Offline

Joined: 14 Jan 2009, 16:00
Posts: 3679
Location: Lisboa
Cenotaph já recebi o telefonema :(


Top
 Profile  
Reply with quote  

Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ]  Go to page 1, 2  Next

All times are UTC [ DST ]


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Style by phpBB3 styles, zdrowie zdrowie alveo
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group