{ /*Verifica se para cada vertice há duas coordenadas, se não dá erro*/
fgets(line2, MAXLINHA, scene);
if(sscanf(line2, " %d %d ", &x, &y)==2)
{ a=a+1;
if(a==nrvertices)
graph=graph+1;
}else{
printf("nr de coordenadas invalido\n");
a=a+1;
} }
}
/*else
/*aqui quero fazer assim, tenho nrvertices=nrlinhas para ler,........leio 1 linha se não verifica::::linha_seguinte, " %d %d ", &x, &y)!=2 || x<0 || y<0 || x<0 && y<0 vai para a seguinte e aasim ate nrlihas, depois conto */
}
/*o inteiro que designa a cor deve tar compreendido entre -26 e 26*/
if(cor>26 || cor<-26)printf("valores invalidos de cor\n");
}
;
/*se no ficheiro se encontrar um p apos uma funçao ela é criada */
if(strcmp(fazer,"P")==0)graph++;/*se for 1 fotografia conta 1 fotografia de cada vez*/
else
if(strcmp(fazer,"T")==0);/*se for 1 rotaçao conta 1 translaçao de cada vez*/
printf("a informaçao forncida para rodar o objecto sobre um ponto é erronea");
else
rotc++;
}
else
if(strcmp(fazer,"S")==0)
{ /*se se fizer um redimensionamento*/
if(fgets(nomfig,MAXLINHA,scene)==NULL)
printf(" não existe informaçao para o objecto ser redimensionado sobre um ponto ");
}else{
if(sscanf(line2,"%s%f",nomfig,&escala)!=2)
printf("a informaçao fornecida para redimensionar o objecto é erronea");
else
if (escala>1)
ampliacao++;
else
if(escala<1 && escala >0)
reducao++;
else
if (escala==1)
printf("o queciente de redimensionamento é igial a 1 por isso a figura não é alterada");
else
if(escala<0)
printf("parametro de redimensionamento invalido");
}
else
if(strcmp(fazer,"Z")==0)
if(fgets(nomfig,MAXLINHA,scene)==NULL)
printf("não existe nenhuma figura para destruir");
else
if(sscanf(line2,"%s", nomfig)!=1)
printf("a informaçao referente a figura para destruir é erronea");
else
destr++;
else
if(strcmp(fazer,"")==0)
printf("não existe nada para fazer!!!");
}
fclose(scene);/*fecho do ficheiro */
/* atao e se encontrar um P a mais , por exemplo depois deste faz o que ?????*/
/* o que devo fazer para asseguar que no fgets se leeem numeros e não caracteres ou outra coisa????*/
/* como é que é lido o ficheiro????*/
printf("foram feitas %d criaçoes de figuras/n ,foram feitas %d translaçoes de figuras/nforam feitas %d destruiçoes de figuras/n foram feitas %d rotaçoes de figuras sobre ponto/n foram feitas %d ampliaçoes de figuras/n foram feitas %d rotaçoes de figuras sobre centro geometrico/n foram feitas %d reduçoes de figu",graph, trans, destr, rc, ampliacao, rotc, reducao);
}
/* não percebi ainda os returns
float escala definiçao de um float como o nome escala
int graph=0 definiçao
oque se faz para encher os objectos com cor???
int trans=0
int rc=0
int rotc=0
int ampliacao=0
int reducao=0
int destr=0*/
este programa le um fixheiro scene.scn do pc com as seguintes infomrçoes::::::::::.
Pergunta
electrico
ola,
eu tou a fazer um trabalho na escola ( em c ansi )e já o fiz mas não consigo de tectar e resolver uns erros,
já tentei várias vezes e alterei o trabalho várias vezes e as vezes compilei sem erros mas quando executei deu-me erro,
o meu programa é o seguinte::::::
mas não posso usar nele o switch
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#define FICHEIRO_TXT "/home/blade/Desktop//scene.scn"
#include <stdio.h>
#include <stdlib.h>
#define MAXLINHA 500
#define MAXNOME 100
#include <string.h>
int main(int argc, char *argv[])
{
FILE * scene;
char fazer[3];/*nome da funcçao */
char line[MAXLINHA]; /*string com MAXLINHA elemetos */
char line2[MAXLINHA];/*string com MAXLINHA elementos*/
char nomfig[MAXLINHA];/*string com MAXLINHA elementos*/
int nrvertices; /*definiçao de um inteiro como o nome nrvertices*/
int cor ;/* definiçao de um inteiro com o nome cor*/
int a=0 ;/* definiçao de um inteiro com o nome a*/
int ang ;/* definiçao de um inteiro como o nome ang*/
float escala ;/* definiçao de um float como o nome escala*/
int graph=0 ;/* definiçao */
int trans=0;
int rc=0;
int rotc=0;
int ampliacao=0;
int reducao=0;
int destr=0;
int x;
int y;
int centro;
if(FICHEIRO_TXT==NULL)
printf("o endereço do ficheiro é inexistente\n");/*É imprimido um erro caso o ficheiro não exista na directoria corrente ou na directoria indicada*/
else
while(fgets(line,MAXLINHA,scene)!=NULL)/* o que faz este comando*/
if(sscanf(line,"%s", fazer)==1)/* aqui é precizo por algum NULL???*/
if(strcmp(fazer, "N")==0){
fgets(line2, MAXLINHA, scene);
if (sscanf(line2, " %s %d %d ", nomfig, &nrvertices, &cor)==3)
{
if(0>=nrvertices)
printf("quantidade de vertices inexistente");
else
if(0<nrvertices)
{ /*neste ciclo verificasse se o nr de vertices coresponde ao nr de coordenadas apresentadas em baixo das caracteristicas do objecto*/
if (fgets(line2, MAXLINHA, scene)==NULL)
printf("não existem coordenadas para o objecto ser criado");
else
if(sscanf(line2, " %d %d ", &x, &y)!=2 || x<0 || y<0 || (x<0 && y<0) )
for(a=0;a<=nrvertices; )
{ /*Verifica se para cada vertice há duas coordenadas, se não dá erro*/
fgets(line2, MAXLINHA, scene);
if(sscanf(line2, " %d %d ", &x, &y)==2)
{ a=a+1;
if(a==nrvertices)
graph=graph+1;
}else{
printf("nr de coordenadas invalido\n");
a=a+1;
} }
}
/*else
/*aqui quero fazer assim, tenho nrvertices=nrlinhas para ler,........leio 1 linha se não verifica::::linha_seguinte, " %d %d ", &x, &y)!=2 || x<0 || y<0 || x<0 && y<0 vai para a seguinte e aasim ate nrlihas, depois conto */
}
/*o inteiro que designa a cor deve tar compreendido entre -26 e 26*/
if(cor>26 || cor<-26)printf("valores invalidos de cor\n");
}
;
/*se no ficheiro se encontrar um p apos uma funçao ela é criada */
if(strcmp(fazer,"P")==0)graph++;/*se for 1 fotografia conta 1 fotografia de cada vez*/
else
if(strcmp(fazer,"T")==0);/*se for 1 rotaçao conta 1 translaçao de cada vez*/
if(fgets(line2,MAXLINHA, scene)==NULL || sscanf(line2,"%s%d%d", nomfig, &x, &y)!=3 )
printf ("não existem as coordenadas para que o objecto seja translado ou as coordenads inseridas não são válidas ");
else
if(sscanf(line2,"%s%d%d", nomfig, &x, &y)==3)/* porque devo por o &?????????*/
trans++;
else
if(strcmp(fazer,"R")==0){ /*se for 1 rotaçao sore um centro geometrico conta 1 rotaçao de cada vez*/
if(fgets(line2,MAXLINHA, scene)==NULL)
printf("não existe informaçao para ao objecto ser rodado");
else
if(sscanf(line2,"%s%d", nomfig, &ang)==2)
rc++;
else
printf("a informaço indicada esta incorrecta!");
}
else
if(strcmp(fazer,"C")==0) { /*se for 1 rotaçao sore um ponto conta 1 rotaçao de cada vez*/
if(fgets(nomfig,MAXLINHA,scene)==NULL)
printf(" não existe informaçao para o objecto ser rodado sobre um ponto ");
else
if(sscanf(line2,"%s%d%d",nomfig, ¢ro, &ang)!=3)
printf("a informaçao forncida para rodar o objecto sobre um ponto é erronea");
else
rotc++;
}
else
if(strcmp(fazer,"S")==0)
{ /*se se fizer um redimensionamento*/
if(fgets(nomfig,MAXLINHA,scene)==NULL)
printf(" não existe informaçao para o objecto ser redimensionado sobre um ponto ");
}else{
if(sscanf(line2,"%s%f",nomfig,&escala)!=2)
printf("a informaçao fornecida para redimensionar o objecto é erronea");
else
if (escala>1)
ampliacao++;
else
if(escala<1 && escala >0)
reducao++;
else
if (escala==1)
printf("o queciente de redimensionamento é igial a 1 por isso a figura não é alterada");
else
if(escala<0)
printf("parametro de redimensionamento invalido");
}
else
if(strcmp(fazer,"Z")==0)
if(fgets(nomfig,MAXLINHA,scene)==NULL)
printf("não existe nenhuma figura para destruir");
else
if(sscanf(line2,"%s", nomfig)!=1)
printf("a informaçao referente a figura para destruir é erronea");
else
destr++;
else
if(strcmp(fazer,"")==0)
printf("não existe nada para fazer!!!");
}
fclose(scene);/*fecho do ficheiro */
/* atao e se encontrar um P a mais , por exemplo depois deste faz o que ?????*/
/* o que devo fazer para asseguar que no fgets se leeem numeros e não caracteres ou outra coisa????*/
/* como é que é lido o ficheiro????*/
printf("foram feitas %d criaçoes de figuras/n ,foram feitas %d translaçoes de figuras/nforam feitas %d destruiçoes de figuras/n foram feitas %d rotaçoes de figuras sobre ponto/n foram feitas %d ampliaçoes de figuras/n foram feitas %d rotaçoes de figuras sobre centro geometrico/n foram feitas %d reduçoes de figu",graph, trans, destr, rc, ampliacao, rotc, reducao);
}
/* não percebi ainda os returns
float escala definiçao de um float como o nome escala
int graph=0 definiçao
oque se faz para encher os objectos com cor???
int trans=0
int rc=0
int rotc=0
int ampliacao=0
int reducao=0
int destr=0*/
este programa le um fixheiro scene.scn do pc com as seguintes infomrçoes::::::::::.
N
A1 4 6
50 50
50 100
100 100
100 50
P
T
A1 100 50 9999
T
A1 100 50
P
R
A1 90
P
R
A1 -45
P
S
A1 2
P
S
A1 0.5
P
C
A1 25 0 -45
P
E
A1
P
C
A1 25 0 -45
E
A1
P
N
Q2 5 4
50 50
50 100
100 100
100 50
50 50
P
S
Q2 3
P
E
Q2
P
N
Q1 5 4
50 50
50 100
100 100
100 50
50 50
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
C
Q1 100 50 45
P
bom acho que disse o suficiente,
se for necessária mais alguma info digam.
antecipadamene agradeço pela ajuda
Editado por electricoLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.