Ir ao conteúdo
  • Cadastre-se

C String aleatória jogo da forca


Posts recomendados

Pessoal, 

 

preciso teminar meu jogo da forca

 

ja fiz o jogo rodar , lendo um arquivo txt , com varias palavras dentro do arquivo

 

esta separado por niveis 

fácil -animais 4 letras

medio paises 10 letras

difícil - deverá ser filmes com mais letras , mais ainda não ta certo ainda

 

põe parei , na escolha das palavras

sempre ele escolhe a primeira palavra /string que esta no arquivo txt

 

teria que ter uma forma randomica de escolher as palavras

 

tentei usar o RANd ou Srand, mas não consegui 

 

se alguem puder me ajudar

 

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<locale.h>
#include<string.h>

char palavra[50];// var global

void jogo()
    {
        //var local
        char letra[50],lacuna[50]="_";
        int tam_palavra,vida=4,x,i,pontos=0;
        for(i=0; i<strlen(palavra); i++)//retorna o tamanho, em caracteres, de uma string
            //strlen() procura o terminador de string e calcula a distância dele ao início da string

        lacuna[i]='-';
        tam_palavra=strlen(palavra);

        printf("\n Palavra secreta: ");
        while(vida>0)
    {
        x=0;
        printf("\n %s \n",lacuna);
        printf("\n Digite uma letra minuscula: ");
        gets(letra);

        for(i=0; i<strlen(palavra); i++)
    {
        if(letra[0]==palavra[i])
    {
        lacuna[i]=palavra[i];
        pontos++;
        x++;
    }
    }
        if(x==0)
    {
        vida=vida-1;
        if(vida==0)
    {
            printf("\n\n voce FOI ENFORCADO!");
            printf("\n A PALAVRA ERA: %s",palavra);
        break;
    }
        else
            printf("\n RESTAM %d VIDA(S)",vida);
    }
        else
    {
        if(pontos==tam_palavra)
    {
            printf("\n\n voce GANHOU!\n\n");
            printf("\n A PALAVRA E: %s\n\n",palavra);
        break;
    }
        else
    {
            printf("\n voce ACERTOU UMA LETRA!");
    }
    }
    }
    }

void easy() //Chama nivel fácil, Animais.
    {
    FILE *fp;
    fp=fopen("facil_animais.txt","r");

    char s[5];//var local

    fgets(palavra,5,fp);

    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
        printf("Dica:\n");
        printf("**ANIMAL COM 4 LETRAS**:\n");
    }

void mediun() // Chama nivel medio, Paises.
    {
    FILE *fp;
    fp=fopen("medio_paises.txt","r");

    char s[11];//var local

    fgets(palavra,11,fp);

    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
    printf("Dica:\n");
    printf("**PAIS COM 10 LETRAS**:\n");
    }


void hard() // Chama nivel difícil, Filmes.
    {
    FILE *fp;
    fp=fopen("dificil_filmes.txt","r");

    char s[50];
    fgets(palavra,50,fp);

    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
    printf("Dica:\n");
    printf("**FILME COM 20 LETRAS**:\n");
    printf("**ESPAÇO DO TECLADO CONTA COMO UM CARACTERE**:\n");
    }

int main() // Funcao Principal.
    {
    setlocale(LC_ALL, "Portuguese");
    int opcao;
    char frase;
    printf("\n   >>>>>>>>>>>>>>>           UTFPR           <<<<<<<<<<<<<<<<");
    printf("\n   #                LINGUAGEM DE PROGRAMACAO                #");
    printf("\n   #                                                        #");
    printf("\n   #                   MENU PRINCIPAL                       #");
    printf("\n   #                                                        #");
    printf("\n   #        1 – fácil                                       #");
    printf("\n   #        2 – Medio                                       #");
    printf("\n   #        3 – difícil                                     #");
    printf("\n   #        0 – Sair                                        #");
    printf("\n   #                                                        #");
    printf("\n   #   Programador:                                         #");
    printf("\n   #   Gustavo Javorsky e Alessandro Donizetti              #");
    printf("\n   ##########################################################\n");


    printf("\n Digite um comando para prosseguir:\n");
    scanf("%d",&opcao);

    switch (opcao) //Puxa função fácil, medio ou difil (le arquivo)
    {
    case 0:
    {
        exit(0);
        break;
    }
    case 1:
    {

        system("cls");
        easy();
        jogo();

        break;
    }
    case 2:
    {
        system("cls");
        mediun();
        jogo();

        break;
    }
    case 3:
    {
        system("cls");
        hard();
        jogo();

        break;
    }
    default:
    {
        printf ("erro default");
        break;
    }
    }
    return 0;
}

segue tambem 

o arquivo txt de fácil animais

 

 

facil_animais.txt

Link para o comentário
Compartilhar em outros sites

@Alessandroequilibrio Faz o seguinte:

 

1) Separe as palavras por arquivos.

     Cada linha você usa uma palavra.

 

2) Em cada dificuldade, você usa o rand para obter uma linha aleatória.

    Ai você só precisa buscar a linha.

    ou seja, use um inteiro para armazenar rand() e depois busque essa linha com fseek.

Link para o comentário
Compartilhar em outros sites

não consigo 

 

gerar o ramdom OK

 

mas o fssek , nao

 

nao compila

 

veja minhas mudanças

 

criei um void aleatorio ()

 

para o rand

 

se eu entendi direito 

int fseek (FILE *fp,aleatorio,SEEK_SET);

 

FILE*fp  e o arquivo para qual eu direciono

aleatorio, seria o valor rand, da linha

e seek set, seria o inicio da palavra

 

 

ai agira tenho que segurar esta palavra em uma strig (palavra), que vai levar para a funçao jogo

 

mas não complilou o INT FSEEK

 

 

 

#include<stdio.h>
#include<stdlib.h>// necessário p/ função srand
#include<locale.h>
#include<string.h>
#include <time.h>//necessário p/ função time()

char palavra[50];// var global

void jogo()
    {
        //var local
        char letra[50],lacuna[50]="_";
        int tam_palavra,vida=4,x,i,pontos=0;
        for(i=0; i<strlen(palavra); i++)//retorna o tamanho, em caracteres, de uma string
            //strlen() procura o terminador de string e calcula a distância dele ao início da string

        lacuna[i]='-';
        tam_palavra=strlen(palavra);

        printf("\n Palavra secreta: ");
        while(vida>0)
    {
        x=0;
        printf("\n %s \n",lacuna);
        printf("\n Digite uma letra minuscula: ");
        gets(letra);

        for(i=0; i<strlen(palavra); i++)
    {
        if(letra[0]==palavra[i])
    {
        lacuna[i]=palavra[i];
        pontos++;
        x++;
    }
    }
        if(x==0)
    {
        vida=vida-1;
        if(vida==0)
    {
            printf("\n\n voce FOI ENFORCADO!");
            printf("\n A PALAVRA ERA: %s",palavra);
        break;
    }
        else
            printf("\n RESTAM %d VIDA(S)",vida);
    }
        else
    {
        if(pontos==tam_palavra)
    {
            printf("\n\n voce GANHOU!\n\n");
            printf("\n A PALAVRA E: %s\n\n",palavra);
        break;
    }
        else
    {
            printf("\n voce ACERTOU UMA LETRA!");
    }
    }
    }
    }
void aleatorio ()
    {
   int aleatorio;

    printf("\n\nProcurando a palavra:\n\n");
    printf("Pressione qualquer tecla para continuar:\n\n");

    srand(time(NULL));
    for (aleatorio=0; aleatorio < 1; aleatorio++)
    {
    // gerando valores aleatórios na faixa de 0 a 10

    aleatorio = rand() % 10;
    }

    getch();
    }


void easy() //Chama nivel fácil, Animais.
    {

    FILE *fp;
    fp=fopen("facil_animais.txt","r");

    char s[10];//var local

    int fseek (FILE *fp,aleatorio,SEEK_SET);


    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
        printf("Dica:\n");
        printf("**ANIMAL COM 4 LETRAS**:\n");
    }

void mediun() // Chama nivel medio, Paises.
    {
    FILE *fp;
    fp=fopen("medio_paises.txt","r");

    char s[11];//var local

    fgets(palavra,11,fp);

    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
    printf("Dica:\n");
    printf("**PAIS COM 10 LETRAS**:\n");
    }


void hard() // Chama nivel difícil, Filmes.
    {
    FILE *fp;
    fp=fopen("dificil_filmes.txt","r");

    char s[50];
    fgets(palavra,50,fp);

    if(fp == NULL)
    printf("Erro, nao foi possivel abrir o arquivo\n");

    fclose(fp);
    printf("Dica:\n");
    printf("**FILME COM 20 LETRAS**:\n");
    printf("**ESPAÇO DO TECLADO CONTA COMO UM CARACTERE**:\n");
    }

int main() // Funcao Principal.
    {
    setlocale(LC_ALL, "Portuguese");
    int opcao;
    char frase;
    printf("\n   >>>>>>>>>>>>>>>           UTFPR           <<<<<<<<<<<<<<<<");
    printf("\n   #                LINGUAGEM DE PROGRAMACAO                #");
    printf("\n   #                                                        #");
    printf("\n   #                   MENU PRINCIPAL                       #");
    printf("\n   #                                                        #");
    printf("\n   #        1 – fácil                                       #");
    printf("\n   #        2 – Medio                                       #");
    printf("\n   #        3 – difícil                                     #");
    printf("\n   #        0 – Sair                                        #");
    printf("\n   #                                                        #");
    printf("\n   #   Programador:                                         #");
    printf("\n   #   Gustavo Javorsky e Alessandro Donizetti              #");
    printf("\n   ##########################################################\n");


    printf("\n Digite um comando para prosseguir:\n");
    scanf("%d",&opcao);

    switch (opcao) //Puxa função fácil, medio ou difil (le arquivo)
    {
    case 0:
    {
        exit(0);
        break;
    }
    case 1:
    {

        system("cls");
        aleatorio();
        easy();
        jogo();

        break;
    }
    case 2:
    {
        system("cls");
        aleatorio();
        mediun();
        jogo();

        break;
    }
    case 3:
    {
        system("cls");
        aleatorio();
        hard();
        jogo();

        break;
    }
    default:
    {
        printf ("erro default");
        break;
    }
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@Alessandroequilibrio No caso o fseek só funciona para setar a posição na linha, tente usar uma função que ira contar a linha até chegar na posição aleatória e essa função pegara a palavra e retornara. Ex:

#include <stdio.h>
#include <string.h>
#include <time.h>
#define MAX 5

//:: retorna numero aleatório de 0 a 4
int numAleatorio(){
 return(rand() % MAX);
}

//:: retorna em 'char *palavra'
void obterPalavra(char *palavra, const char *arquivo, int linha){
  FILE *ff = fopen(arquivo, "r");
  if(ff){

    while(fgets(palavra, 500, ff) > 0){
      //se a linha for 2, ela diminui 2 e encontra...
      if(linha-- == 0)
        break;
    }
    if(strlen(palavra)>0){
        palavra[strlen(palavra)] = '\0';
    }else{
        palavra[0] = '\0';
    }
    fclose(ff);
  }else {
    printf("Falha ao abrir arquivo!\n");
  }
}

int main(){
  srand(time(NULL));

  char palavra[30];
  int ale = numAleatorio();
  
  obterPalavra(palavra, "animais.txt", ale);
  printf("Palavra <%d> no arquivo <animais.txt>: %s\n\n", ale, palavra);
  return 0;
}

Conteudo do arquivo animais.txt:

leao
onca
tigre
gato
cachorro

 

Link para o comentário
Compartilhar em outros sites

funcionou o Rand

 

ainda estou com um pequeno erro

esta criando uma lacuna a mais , isso não acontecia antes , com codico antigo

 

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<locale.h>
#include<string.h>
#define MAX 10


//:: retorna numero aleatório de 0 a 10
int numAleatorio()
{
return(rand() % MAX);
}

char palavra[50];// var global

void jogo()
    {
        //var local
        char letra[50],lacuna[50]="_";
        int tam_palavra,vida=4,x,i,pontos=0;
        for(i=0; i<strlen(palavra); i++)//retorna o tamanho, em caracteres, de uma string
            //strlen() procura o terminador de string e calcula a distância dele ao início da string

        lacuna[i]='-';
        tam_palavra=strlen(palavra);

        printf("\n Palavra secreta: ");
        while(vida>0)
    {
        x=0;
        printf("\n %s \n",lacuna);
        printf("\n Digite uma letra minuscula: ");
        gets(letra);

        for(i=0; i<strlen(palavra); i++)
    {
        if(letra[0]==palavra[i])
    {
        lacuna[i]=palavra[i];
        pontos++;
        x++;
    }
    }
        if(x==0)
    {
        vida=vida-1;
        if(vida==0)
    {
            printf("\n\n voce FOI ENFORCADO!");
            printf("\n A PALAVRA ERA: %s",palavra);
        break;
    }
        else
            printf("\n RESTAM %d VIDA(S)",vida);
    }
        else
    {
        if(pontos==tam_palavra)
    {
            printf("\n\n voce GANHOU!");
            printf("\n A PALAVRA E: %s",palavra);
        break;
    }
        else
    {
            printf("\n voce ACERTOU UMA LETRA!");
    }
    }
    }
    }

// Chama nivel fácil, animais
void easy(char *palavra, const char *arquivo, int linha){
  FILE *ff = fopen(arquivo, "r");
  if(ff){

    while(fgets(palavra, 50, ff) > 0){
      //se a linha for 2, ela diminui 2 e encontra...
      if(linha-- == 0)
        break;
    }
    if(strlen(palavra)>0){
        palavra[strlen(palavra)] = '\0';
    }else{
        palavra[0] = '\0';
    }
    fclose(ff);
  }else {
    printf("Falha ao abrir arquivo!\n");
  }
    printf("Dica:\n");
    printf("**ANIMAL**:\n");
}

// Chama nivel medio, Paises.
void mediun(char *palavra, const char *arquivo, int linha){
  FILE *ff = fopen(arquivo, "r");
  if(ff){

    while(fgets(palavra, 50, ff) > 0){
      //se a linha for 2, ela diminui 2 e encontra...
      if(linha-- == 0)
        break;
    }
    if(strlen(palavra)>0){
        palavra[strlen(palavra)] = '\0';
    }else{
        palavra[0] = '\0';
    }
    fclose(ff);
  }else {
    printf("Falha ao abrir arquivo!\n");
  }
    printf("Dica:\n");
    printf("**PAIS SULAMERICANO**:\n");
}

// Chama nivel difícil, Filmes.
void hard(char *palavra, const char *arquivo, int linha){
  FILE *ff = fopen(arquivo, "r");
  if(ff){

    while(fgets(palavra, 50, ff) > 0){
      //se a linha for 2, ela diminui 2 e encontra...
      if(linha-- == 0)
        break;
    }
    if(strlen(palavra)>0){
        palavra[strlen(palavra)] = '\0';
    }else{
        palavra[0] = '\0';
    }
    fclose(ff);
  }else {
    printf("Falha ao abrir arquivo!\n");
  }
    printf("Dica:\n");
    printf("**FILME**:\n");
}

int main() // Funcao Principal.
    {

    srand(time(NULL));
    int ale = numAleatorio();


    setlocale(LC_ALL, "Portuguese");
    int opcao;
    char frase;
    printf("\n   >>>>>>>>>>>>>>>           UTFPR           <<<<<<<<<<<<<<<<");
    printf("\n   #                LINGUAGEM DE PROGRAMACAO                #");
    printf("\n   #                                                        #");
    printf("\n   #                   MENU PRINCIPAL                       #");
    printf("\n   #                                                        #");
    printf("\n   #        1 – fácil                                       #");
    printf("\n   #        2 – Medio                                       #");
    printf("\n   #        3 – difícil                                     #");
    printf("\n   #        0 – Sair                                        #");
    printf("\n   #                                                        #");
    printf("\n   #   Programador:                                         #");
    printf("\n   #   Gustavo Javorsky e Alessandro Donizetti              #");
    printf("\n   ##########################################################\n");


    printf("\n Digite um comando para prosseguir:\n");
    scanf("%d",&opcao);

    switch (opcao) //Puxa função fácil, medio ou difil (le arquivo)
    {
    case 0:
    {
        exit(0);
        break;
    }
    case 1:
    {
        system("cls");
        easy(palavra, "animais.txt", ale);
        jogo();

        break;
    }
    case 2:
    {
        system("cls");
        mediun(palavra, "paises.txt", ale);
        jogo();

        break;
    }
    case 3:
    {
        system("cls");
        hard(palavra, "filmes.txt", ale);
        jogo();

        break;
    }
    default:
    {
        printf ("erro default");
        break;
    }
    }
    return 0;
}

image.thumb.png.4e50d2ea0ba037425647716fccfe7c2c.png

animais.txt

filmes.txt

paises.txt

adicionado 48 minutos depois

Ja consertei

 

para ler as strings mudei de fgets para fscanf

 

 while(fscanf(ff,"%s", palavra) > 0){

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...
Em 30/11/2017 às 10:09, Alessandroequilibrio disse:

erro de novo

 

o fscanf , não vai funcionar para palavras compostas

 

tipo no nivel filmes

temos

 

querra nas estrelas , 

 

ai a função fscanf so pega "gerra"

 

vou ver o que podemos fazer

 

 

adicionado 19 minutos depois
Em 30/11/2017 às 10:09, Alessandroequilibrio disse:

erro de novo

 

o fscanf , não vai funcionar para palavras compostas

 

tipo no nivel filmes

temos

 

querra nas estrelas , 

 

ai a função fscanf so pega "gerra"

 

vou ver o que podemos fazer

 

bom dia Alessandro você conseguiu termina o jogo da forca ? 

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

Use o Scanset : Vai captura o fluxo de caracteres até um condição seja satisfeita, para esse caso até que encontre nova-linha ('\n') podemos implementar um nova função scanf apenas para strings.

char *scanf_string (int tamanho, char string[]){
  char fmt[120];
    string[0] = '\0';
    sprintf (fmt, "%%%d[^\n]", tamanho - 1); scanf (fmt, string);
    for (char c = getchar (); ('\n'  !=  c)&&(c  !=  EOF); c = getchar ());
  return string;}

 

 

adicionado 9 minutos depois

Atualizei para que possamos escolher o  break:

char * scanf_string (int tamanho, char string[], char brk[]){
  char fmt[120];
    string[0] = '\0';
    sprintf (fmt, "%%%d[^%s]", tamanho - 1, brk); scanf (fmt, string);
    for (char c = getchar (); ('\n'  !=  c)&&(c  !=  EOF); c = getchar ());
  return string;}

Use assim:

#include <stdio.h> 
char * scanf_s(int tamanho, char string[], char brk[]);
/* 
 * funcao main : principal do programa  */
int main (void){
  char seu_nome_completo[BUFSIZ];
    printf ("$Entre com seu nome > "), scanf_s (BUFSIZ, seu_nome_completo, "\n");
    printf (":Seu nome completo > %s\n\n", seu_nome_completo);
  return 0;}

 

Ps.: Exitem muitas formar de se fazer isso, essa é que mais gosto

Atualizado o identificador da função de scanf_s para scanf_string, para ficar de acordo com o Padrão C11

 

Link para o comentário
Compartilhar em outros sites

Versão com stream:

char * scanf_string(FILE * fluxo, int tamanho, char string[], char brk[]){
  char fmt[120];
    string[0] = '\0';
    sprintf (fmt, "%%%d[^%s]", tamanho - 1, brk); fscanf (fluxo, fmt, string);
    for (char c = fgetc (fluxo); ('\n'  !=  c)&&(c  !=  EOF); c = fgetc ( fluxo ));
  return string;}

Atualizado o identificador da função de scanf_s para scanf_string, para ficar de acordo com o Padrão C11

Link para o comentário
Compartilhar em outros sites

Use:

char * scanf_string (FILE * fluxo, int tamanho, char string[], char brk[]);
/* 
 * Funcao main : principal do programa */
int main (void){
  char texto[300];
    scanf_string (stdin, 300, texto, "\n");
  return 0;}

 

*Atualizado o identificador da função de scanf_s para scanf_string, para ficar de acordo com o Padrão C11.

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, giu_d disse:

Se puder gostaria q explicasse por que isso:


"%%%d[^%s]"

Realmente não entendi

 

%d é o especificador de número inteiro na forma decimal.

%s é o especificador de string.

E como % é usado em especificadores nas funções das famílias de funções scanf e printf, é preciso ter uma sequencia de escape de caractere para quando você quer usar o caractere % (ao invés de um especificador) na string de formatação dessas funções, nesse caso o usa-se %% para gerar o caractere % na string.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, giu_d disse:

Olá. Ando observando seus códigos. Há qto tempo você programa em C? (desculpa a curiosidade)

Isso vai ficar só entre nós. Ninguém mais vai ficar sabendo se responder rs...

Venho aos pouquinhos faz 4 anos (nunca passei dos básico "Hello C"), mais de fato mesmo foi nos últimos 6 meses que aprendi C/C++/C#.

Não conte pra ninguém!

 
 
 
1 hora atrás, giu_d disse:

@AnsiC Se puder gostaria q explicasse por que isso:


"%%%d[^%s]"

Realmente não entendi

Exatamente como dito por @isrnick !

Link para o comentário
Compartilhar em outros sites

@AnsiC Poderia usar scanf_s da biblioteca padrão (a partir da versão C11), se estiver disponível na implementação do compilador (o GCC tem), mas tem que definir __STDC_WANT_LIB_EXT1__ com valor 1 antes de incluir stdio.h para poder usar a função:

 

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

int main(){
    char frase[15] = "";
    
    scanf_s("%[^\n]", frase, 15);
    
    printf("%s\n", frase);
    
    return 0;
}

 

(E seria melhor usar um nome diferente para a sua função, para não ser confundido com o scanf_s da biblioteca padrão.)

Link para o comentário
Compartilhar em outros sites

4 minutos atrás, isrnick disse:

@AnsiC Esse é o GCC (GNU Compiler Collection), tá até escrito ali versão 6.3.0. O mingw é uma versão para Windows do GCC...

É sim, meu sistema é windows.

adicionado 4 minutos depois

Como esse compilador não é microsoft então essa função não é padrão. 

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

19 minutos atrás, AnsiC disse:

É sim, meu sistema é windows.

adicionado 4 minutos depois

Como esse compilador não é microsoft então essa função não é padrão. 

 

O compilador de C da microsoft só atende ao padrão C89 da linguagem... E eles não tem interesse em atualizar pois a prioridade deles é apenas atender os padrões do C++. Pra mim isso significa que eles não tem interesse que programem em C usando o compilador deles, e ele está lá apenas para viabilizar alguns recursos do C no C++, que é o que realmente lhes interessa, logo eu diria que o compilador da Microsoft não pode ser considerado como um padrão para o que do C pode ser usado no Windows.

 

Então as distribuições para Windows do GCC basicamente são a única opção para programar em C atual no Windows (até mesmo o Clang ainda não atende totalmente o padrão C11).

 

E estas funções e macro são definidas no padrão C11, logo são sim padrão da linguagem.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, isrnick disse:

 

O compilador de C da microsoft só atende ao padrão C89 da linguagem... E eles não tem interesse em atualizar pois a prioridade deles é apenas atender os padrões do C++. Pra mim isso significa que eles não tem interesse que programem em C usando o compilador deles, e ele está lá apenas para viabilizar alguns recursos do C no C++, que é o que realmente lhes interessa, logo eu diria que o compilador da Microsoft não pode ser considerado como um padrão para o que do C pode ser usado no Windows.

 

Então as distribuições para Windows do GCC basicamente são a única opção para programar em C atual no Windows (até mesmo o Clang ainda não atende totalmente o padrão C11).

 

E estas funções e macro são definidas no padrão C11, logo são sim padrão da linguagem.

Mais o que você está dizendo não se aplica ao stdio.h, evidente que assim teríamos nos cabeçarios do arquivo stdio.h, aqui conta que a última modificação foi 2017. Esse arquivo é uma "SIGLA" para Standard Input and Output, e não consta essas funções nele, pelo menos não consigo enxergar nada do que você diz lá nesse arquivo de cabeçario.

 

Poderia mostra um print da sua versão C11: Topo do arquivo onde consta o ano da versão, e o locais ondes os cabeçarios se encontram só para consta se aqui está faltando ou eu que não encontrei mesmo em minha versão. 

Por favor, poderia me dizer onde atualizar para mesma versão mais atual que 2017?

 

Mesmo sendo padrão ou EXTENSÃO DO PADRÃO! Não se aplica a versão que estou usando 2017 como padrão. Eu não tinha que me preocupa com o identificadores causando conflitos, mesmo assim atualizo para que no futuro não venha até problemas: scanf_s para scanf_string para impedir futuros conflitos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

24 minutos atrás, AnsiC disse:

Mesmo sendo Padrão! Não se aplica a versão que estou usando!

adicionado 6 minutos depois

Isso que venho tentando lhe explica-te, como não se aplica a minha versão, eu não tenho que me preocupar com o identificador causar conflitos. rsrs

Entendi. :thumbsup:

Eu ainda recomendaria usar um nome diferente, ser igual não seria problema se fosse uma de uma biblioteca de terceiros, pois entende-se que pode ser diferente mesmo com nome igual então tem que pesquisar como funciona, mas para algo definido no padrão da linguagem as pessoas assumem que funciona como definido no padrão.

Link para o comentário
Compartilhar em outros sites

Aguardo ... 

adicionado 6 minutos depois
14 minutos atrás, isrnick disse:

Eu ainda recomendaria usar um nome diferente, ser igual não seria problema se fosse uma de uma biblioteca de terceiros, pois entende-se que pode ser diferente mesmo com nome igual então tem que pesquisar como funciona, mas para algo definido no padrão da linguagem as pessoas assumem que funciona como definido no padrão.

Dei rápido pesquisada e vi que se trada de uma extensão do padrão. Tanto que só podemos usar quando aplicamos o macro:

1 hora atrás, isrnick disse:

#define __STDC_WANT_LIB_EXT1__ 1

Que é bem sugestivo:

__STDC: Padrão C

_WANT:  com

_LIB: Bibliotecas

_EXT1__: Extensiva 9899:201X 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

15 minutos atrás, AnsiC disse:

Aguardo ... 

Não estou mais em casa, aqui só uso compiladores online, só a noite pra eu ver como está.

 

16 minutos atrás, AnsiC disse:

Dei rápido pesquisada e vi que se trada de uma extensão do padrão.

Também pesquisei, e realmente é algo opcional e o compilador pode escolher não implementar e ainda assim atender ao padrão C11 sem problemas. E aparentemente o GCC não implementou... Mas eu compilei no MinGW e o programa rodou... :huh: curioso, vou ter que ver melhor o que está aconteceu.

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, isrnick disse:

Também pesquisei, e realmente é algo opcional e o compilador pode escolher não implementar e ainda assim atender ao padrão C11 sem problemas. E aparentemente o GCC não implementou... Mas eu compilei no MinGW e o programa rodou... :huh: curioso, vou ter que ver melhor o que está aconteceu.

Eu entendo, não como Padrão ou (Normativo como dizem os americanos), é como se fosse um aviso de que isso um dia será padrão, por hora é só um complemento que você usa se quiser.

adicionado 0 minutos depois

Próprio macro revela essa aproximação em seu nome.

adicionado 5 minutos depois

 

 

8 minutos atrás, isrnick disse:

Não estou mais em casa, aqui só uso compiladores online, só a noite pra eu ver como está.

Já estou por dentro, pode ignorar esse pedido! Obrigado.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...