Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dani_machado

Erro com switch

Recommended Posts

olá,

estou com um problema ao tentar compilar o seguinte programa:

 

#include <stdio.h>    
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

FILE *arquivo;
char pal[50];

void criarArquivo()
{
     arquivo = fopen("forca.txt","wt");
     fclose(arquivo);              
}

void alterarArquivo()
{
     arquivo = fopen("forca.txt","at");
     
	 fputs(pal,arquivo);
	 fputs("\n",arquivo);
		 
        
     fclose(arquivo);     
}

void lerArquivo()
{
     if ((arquivo = fopen("forca.txt","rt"))==(NULL))
     {
           puts("Voce ainda nao gravou nenhuma palavra no arquivo");           
     }
     else 
     {
          while ((fgets(pal,49,arquivo)) != NULL)
          {
                printf("%s", pal);     
          }
          fclose(arquivo);     
     }    
}



int main()
{
   criarArquivo();
   char op;
   puts("Digite 1 para cadastrar uma palavra");
   puts("Digite 2 para ler as palavras cadastradas");
   puts("Digite 3 para jogar");
   puts("Digite 4 para sair");
   scanf("%c", op);
   
   do
   {
     switch(op)
     {
               case 1:
                    alterarArquivo();
               case 2:
                    lerArquivo();
               case 3:
                    printf("Ainda não implementei");
     }
   }while((op)!='4');
       
}

Quando eu compilo, abre normal o programa, mas quando eu digito a opção desejada aparece "Trabalho.exe Parou de funcionar", isso só passou a acontecer quando coloquei o switch, o que será que eestou fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

oie dani...

hum só olhando por cima ja da pra ve um monte de errinhos de digitação ou sintaxe por exemplo

 

1º na variavel 'op' é um char e no switch case você coloca 1 inteiro e ñ '1' caracter

2º no scanf ta faltanu um '&' o certo e´ scanf("%c",&op);

3º a fopen tem como argumento de arbertura uns 'wt' e é só 'w' uns 'rt' onde é 'r' etc

 

identa e prototipa as funçoes pode ajuda a visualiza melhor o codigo e acha esses errinhus , alguns comentarios de vez em quando tb ajuda... =]

 

fiz um exercicio parecido com esse na sala la na fakul, ta bein comentado e tals vo posta ele ai pra donwnload

 

exercicio

 

ta bem nadave... o codigo tb ñ ta la essas coisas , mas se te ajuda baxa e da uma olhada

 

 

flwwwwwwwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada Kadu pela ajuda, coloquei "at", "rt" e "wt" ao invés de "a", "r" e "w", pois estou manipulando arquivo texto, até ai esta funcionando, o que eu tinha esquecido era das aspas'' nos números e do & no scanf, valeu pela ajuda em!!! tava me mantando e não tinha visto esses dois pequenos erros... brigadão... agora vou acabar de fazer o jogo da forca :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

soh como observação:

 

[pseudo-code]

 

switch(variavel)
{
   case 'x':

   // Linhas de código

   break;

   case 'y':

   // Linhas de código

   break;

   case 'w':

   // Linhas de código
   break;

}

 

Tem que ter o break para ele sair fora do switch

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, ai vai o jogo da forca utilizando lista encadeada e arquivo:

 

#include <stdio.h> 
#include <cstdlib>   
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

using namespace std;

struct  no//declaração da lista linear em que serão gravadas as palavras do arquivo
{
		char info[15];
		struct no * prox;
};
typedef struct no Lista; 

FILE *arquivo; //declaração do arquivo 
char pal[50]; //declaração do vetor de string que será utilizado para cadastrar as palavras no arquivo


void criarArquivo()
{
     arquivo = fopen("forca.txt","wt");
     fclose(arquivo);              
}

void cria (Lista **L) // cria a lista linear
{
	*L=NULL;
}
void InsereInicio (Lista **L, char *c)//insere palavra no inicio da lista
{
    
    Lista * p = (Lista *)calloc (1, sizeof(Lista));
	strcpy(p->info,c);
	p->prox = *L;
	*L = p;     
}

void insereArquivo_na_Lista(Lista **L)
{
  char pal[15];
  
  
	if  ( (arquivo=fopen("forca.txt", "r"))==NULL)
		printf("erro ao abrir arquivo");
	else
	{                
		free(*L);
		cria(L);
		while ((fgets(pal, 15,arquivo))!=NULL)
			InsereInicio(L, pal);
		fclose(arquivo);
    }
}



void ImprimeLista(Lista *L)
{
     Lista *p = L;
     while(p != NULL)
     {
         printf("%s-> ", p->info);
         p = p->prox;
     }
     printf("NULL");
}



void incluirArquivo(char *pal)
{
     pal[50];
     arquivo = fopen("forca.txt","a+");
     
     fputs(pal,arquivo);
	 fputs("\n",arquivo);
				 
       
     fclose(arquivo);
     
       
}

void lerArquivo()
{
     if ((arquivo = fopen("forca.txt","rt"))==(NULL))
     {
           puts("Voce ainda nao gravou nenhuma palavra no arquivo");           
     }
     else 
     {
          while ((fgets(pal,49,arquivo)) != NULL)
          {
                printf("%s", pal);     
          }
          fclose(arquivo);     
     }    
}

int tamanhoDaLista(Lista *L)
{
     Lista *p = L;
     int valor = 0;
     
     while(p != NULL)
     {
         valor = valor + 1;
         p = p->prox;
     }
     
     return valor;
     
}



void jogo(Lista *L,char *c)
{
     Lista *p;
     int tamanho,gera_rand, val=0;
     
     
     
     tamanho=tamanhoDaLista(L);
     srand(time(NULL));
     
     gera_rand = rand() % tamanho;
     
     
     p = L;
     
     while (val != gera_rand)
     {
        p=p->prox;
        val=val+1;      
     }
     strcpy(c,p->info);
         
}

void teste (char *v, char *c, char *l, int &a, int &b, int &quant)
{
    int j,e=0;
    for (j=0;j<quant;j++)
    {
        if (v[j] == l[0])
        {
            c[j]=v[j];
            a++;
        }
        else
            e++;
    }
    if (e==quant)
    b++;
}




int main()
{
   
     Lista *L;
     cria(&L);
     char v[50],p[50];
     int op, valor;
     do
     {
         system("cls");
         puts("Digite: ");
         puts("1. para criar e/ou alterar o arquivo: ");
         puts("2. para cadastrar uma palavra: ");
         puts("3. para inserir as palavras do arquivo na lista encadeada: ");
         puts("4. para ler as palavras cadastradas no arquivo: ");
         puts("5. ler as palavras cadastradas na lista encadeada: ");
         puts("6. para jogar: ");
         puts("7. para sair: ");
         scanf("%d",&op);
     
     
       switch(op)
       {
           case 1:
                {
                     criarArquivo();
                     break;
                }
           case 2:
                {
                     system("cls");
                     puts("Digite a palavra que deseja cadastrar");
                     scanf("%s",v);
                     incluirArquivo(v);
                     
                     break;                    
                }
           case 3:
                {
                    insereArquivo_na_Lista(&L);
                    break;                    
                }
           case 4:
                {
                    lerArquivo();
                    getch();
                    break;
                }
           case 5:
                {
                    ImprimeLista(L);
                    getch();
                    break;                    
                }
           case 6:
                {
                    jogo(L,p);
                    char l[1], a[81],letras[81];
                    int erro=0,acerto=0,i=0,j,k,quant, w,f;
                    
                    strupr(p);
                    quant = strlen (p);
                    system ("cls");
                    printf("_________\n");
                    for (w=0;w<quant;w++)
                    {
                       printf("_ ");
                       printf("Digite a letra que deseja tentar");
                       
                       quant = quant - 1;
                       
                       
                       for (j=0;j<quant;j++)
                              a[j] = '_';

                       for (j=0;j<10;j++)
                              letras[j] = ' ';

                       while(erro < 6 && acerto < quant)
                       {
                            cin >> l;
                            strupr (l);
                            do
                            {
                                j=1;
                                for (k=0;k<10;k++)
                            {
                            if (l[0] == letras[k])
                                     j=0;
                       }
                       if (j==0)
                       {
                            printf("\nLetra ja digitada, tente novamente");
                            cin >> l;
                            strupr (l);
                       }
                     }
                     while (j==0);
                     letras[i]=l[0];
                     i++;
                     system ("cls");
                     teste(p,a,l,acerto,erro, quant);

                     switch (erro)
                     {
                         case 0: cout<<"_________\n\t \n\n\n";break;
                         case 1: cout<<"_________\n\t O\n\n\n";break;
                         case 2: cout<<"_________\n\t O\n\t |\n\n";break;
                         case 3: cout<<"_________\n\t O\n\t/|\n\n";break;
                         case 4: cout<<"_________\n\t O\n\t/|\\\n\n"; break;
                         case 5: cout<<"_________\n\t O\n\t/|\\\n\t/ \n";break;
                         case 6: cout<<"_________\n\t O\n\t/|\\\n\t/ \\\n";break;
                     }

                     for (f=0;f<quant;f++)
                            cout<<a[f]<<" ";
                            cout<<endl;
                            cout<<"Acertos: "<<acerto<<endl<<"Erros: "<<erro<<endl;
                            cout<<"Letras ja tentadas: "<<letras<<endl<<endl;
                            cout<<"Digite a letra que deseja tentar: ";
                    }
                    if (erro == 6)
                    {
                        cout<<"GAME OVER!"<<endl;
                        cout<<"A palavra correta e:"<<p;
                    }
                    else
                       cout<<endl<<endl<<"Voce venceu!"<<endl;

                    system("PAUSE");
                    return EXIT_SUCCESS;
              }
           }
           getch();
           
           break;                  
       
          }
     
  }while(op!=7);
  
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perguntas:

 

Pq você cria uma função só p/ atribuir NULL a uma variável?

 

Pra que serve o "while (j==0);"? 

 

 

 

 

Não precisa de chaves num case.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi dani...

 

o joguinho ta muito legal !!!

 

mas como a isis falo pra que serve o while??

 

e tb oq acontece se eu apertar jogar direto sem passa pelas outras fases??

 

mais ta muito chiki seu joguinho vo copia o fonte e fala pra os bixo da fakul estuda XD

 

bye

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.