Após o programa rodar o jogo sem problema, usando de palavra aleatória do arquivo .txt, ele da erro quando tento adicionar uma nova palavra, ele pergunta qual a palavra nova e assim que é digitada aparece que não houve comunicação com o banco de dados. Fiz uma tentativa usando os arquivos disponiveis do curso com o programa completo até essa aula e deu o mesmo problema.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "forca.h"
char palavrasecreta[20];
char chutes[26];
int chutesdados = 0;
void abertura() { //Não gera retorno para o main
printf("=====================\n");
printf("|| Jogo de Forca ||\n");
printf("=====================\n\n");
}
void chuta(){
char chute;
scanf (" %c", &chute);
chutes[(chutesdados)] = chute;
(chutesdados)++;
}
int jachutou(char letra){ //Gera um retorno para o main como uma variavel
int achou = 0;
for(int j=0; j< chutesdados;j++){
if (chutes[j]==letra) {
achou = 1;
break;
}
}
return achou;
}
void desenhaforca(){
printf("Você já deu %d chutes\n", chutesdados);
for(int i = 0; i < strlen (palavrasecreta); i++){
int achou = jachutou(palavrasecreta[i]);
if(achou){
printf("%c ", palavrasecreta[i]);
}
else{
printf ("_ ");
}
}
printf ("\n");
}
void adicionapalavra(){
FILE *f;
char quer;
printf("Voce deseja adicionar uma nova palavra ao jogo (S/N)\n");
scanf(" %c", &quer);
if(quer=='S'){
char novapalavra[20];
printf("Qual a nova palavra?(digite em letras maiusculas)");
scanf("%s", novapalavra);
f = fopen("palavras.txt", "r+");
if(f == 0){
printf("Desculpa, banco de dados indisponivel\n\n");
exit(1);
}
int qtd;
fscanf(f, "%d", &qtd);
qtd++;
fseek(f, 0, SEEK_SET);
fprintf(f, "%d", qtd);
fseek(f, 0, SEEK_END);
fprintf(f, "\n %s", novapalavra);
}
fclose(f);
}
void escolhepalavra(){
FILE *f;
f = fopen("palavras.txt", "r");
if(f == 0) {
printf("Desculpa, banco de dados indisponivel\n\n");
exit(1);
}
int qtddepalavras;
fscanf(f, "%d", &qtddepalavras);
srand(time(0));
int randomico = rand() % qtddepalavras;
for(int i =0; i<=randomico;i++){
fscanf(f, "%s", palavrasecreta);
}
fclose(f);
}
int acertou(){
for(int i=0;i<strlen(palavrasecreta);i++){
if(!jachutou(palavrasecreta[i])){
return 0;
}
}
return 1;
}
int enforcou() {
int erros=0;
for(int i = 0; i<chutesdados;i++){
int existe=0;
for(int j = 0; j<strlen(palavrasecreta); j++){
if(chutes[i]==palavrasecreta[j]){
existe=1;
break;
}
}
if(!existe) erros++;
}
return erros >= 6;
}
int main(){
escolhepalavra();
abertura();
do {
desenhaforca();
chuta();
}while (!acertou() && !enforcou());
adicionapalavra();
}