Ir ao conteúdo

C Reproduzir imagem através de código


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

Tenho esse código porém ele está incompleto e não sei como fazer as partes que faltam . Alguém pode me dar uma luz ? 

 

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

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
   
    // FALTA FAZER
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha)
     
    
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;

    // FALTA FAZER
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc elementos  
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
    
    
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

  • Curtir 1
  • Confuso 1
Postado

Estou a 2 dias tentando fazer esse código mas nada sai..., alguém me da uma ajuda por favor eu preciso entregar ele amanhã 😭

 

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

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;

    f = fopen ("name.txt", "wt");
    if (f == NULL)
    {
        puts ("Erro ao criar arquivo");
        exit (10);
    }
   
    // FALTA FAZER
    // 1. gravar o numero mágico 'P1' no arquivo
    // 2. gravar uma linha de comentário '#...'
    // 3. gravar o número de linhas e colunas
    // 4. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha)
     
    
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
  
   f = fopen ("name.txt", "r");

    // FALTA FAZER
    // 1. ler o número de linhas e colunas
    // 2. ler o número 'n' de pontos
    // 3. alocar o vetor 'img' com nl x nc elementos  
    // 4. preencher o vetor imagem com zeros
    // 5. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
    
    
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

  • Curtir 1
Postado

acho que podia dizer o que está tentando fazer, postar o enunciado... Dizer qual sua dúvida...

 

 

O que tem feito? Qual foi a ultima modificação? O que saiu errado?

 

Que formato está usando? Tem uma documentação?

  • Curtir 1
Postado
10 minutos atrás, arfneto disse:

acho que podia dizer o que está tentando fazer, postar o enunciado... Dizer qual sua dúvida...

 

O enunciado é esse 

 

image.thumb.png.d6e22043015027be612513584271c532.png

image.thumb.png.9454217922e35e21e883b7ba3a712104.png

image.thumb.png.a2978ce09edd1a57b95770064f4b4af1.png

Ainda estou trabalhando na função write_pbm a qual tenho q gravar os dados porém não estou sabendo como implementar isso 

 

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    
    int P1;
    
    f = fopen ("name.txt", "wt");
    if (f == NULL)
    {
        puts ("Erro ao criar arquivo");
        exit (10);
    }

    do 
    {
        scanf ("%d",&P1);
        fprintf(f, "%d" ,P1);

        scanf ("%d",&nl);
        fprintf(f, "%d" ,nl);

        scanf ("%d",&nc);
        fprintf(f, "%d" ,nc);
    }

    // PARA FAZER
    // 1. gravar o numero mágico 'P1' no arquivo
    // 2. gravar uma linha de comentário '#...'
    // 3. gravar o número de linhas e colunas
    // 4. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha) 
    fclose(f);
}

 

  • Curtir 1
Postado

devia trabalhar primeiro na função que le... vai gravar o que sem ter lido?

 

o que recebeu como original? isso que postou? o que mudou?

 

tem um arquivo de entrada? não veio com o enunciado?

 

Não entendo porque não usar o formato BMP, afinal poderia testar com qualquer programa de imagem.

 

Entenda que na entrada só tem os ´1´ ...

 

Escreva uma função para mostrar na tela a imagem, ou não vai ter como testar. Faça o simples e comece com um quadradinho, ou aquele J do enunciado.

Mantenha o foco e faça passo a passo ou não vai terminar em tempo.

 

leia, mostre na tela e veja se esta igual

depois grave

e leia de novo

  • Curtir 1
Postado
1 minuto atrás, arfneto disse:

devia trabalhar primeiro na função que le... vai gravar o que sem ter lido?

Eu fui nessa porque é a primeira...

 

1 minuto atrás, arfneto disse:

o que recebeu como original? isso que postou? o que mudou?

O original é esse aqui :

 

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

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    // --------------------------------------------
    // Para fazer
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem
    //    (no máximo 100 valores por linha)
    // --------------------------------------------
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.
    // --------------------------------------------
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

3 minutos atrás, arfneto disse:

Não entendo porque não usar o formato BMP, afinal poderia testar com qualquer programa de imagem

Estou fazendo isso porque é requisitado usar esse tipo no enunciado

4 minutos atrás, arfneto disse:

Entenda que na entrada só tem os ´1´ ...

 

Escreva uma função para mostrar na tela a imagem, ou não vai ter como testar. Faça o simples e comece com um quadradinho, ou aquele J do enunciado.

Mantenha o foco e faça passo a passo ou não vai terminar em tempo.

 

leia, mostre na tela e veja se esta igual

depois grave

e leia de novo

Ta bom

 

  • Curtir 1
Postado
1 hora atrás, BifeProgramador disse:
typedef int *image;

evite declarar assim. Está declarando um nome, e o nome é image

 

está criando um nome e o tipo do nome é int*

 

Use a convenção comum de usar a primeira letra em maiúscula para os nomes que define...

 

prefira

 

        typedef        int*        Image; // image eh int*

 

1 hora atrás, BifeProgramador disse:
image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

 

Isso não está bom. Retorne um ponteiro para a area alocada....

 

    Image*             aloc_memo(int,int);

 

Isso se vai usar só um formato de bits lá

1 minuto atrás, BifeProgramador disse:

Eu fui nessa porque é a primeira...

 

mas vai gravar o que se não sabe se o programa sabe ler direito?

  • Curtir 1
Postado
1 minuto atrás, arfneto disse:

evite declarar assim. Está declarando um nome, e o nome é image

 

está criando um nome e o tipo do nome é int*

 

Use a convenção comum de usar a primeira letra em maiúscula para os nomes que define...

 

prefira

O código já veio assim e eu não posso mudar... O professor passa o código e a gente tem que entender e completar. As únicas partes que podemos modificar é onde tem o "Para fazer"

3 minutos atrás, BifeProgramador disse:
void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    // --------------------------------------------
    // Para fazer
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem
    //    (no máximo 100 valores por linha)
    // --------------------------------------------
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.
    // --------------------------------------------
    fclose(f);
    return img;
}

Só posso editar essa parte do código

  • Curtir 1
Postado

Está errado. Mude e resolva o problema. Depois veja o que aconteceu com o enunciado.

 

aproveite o exemplo e crie um arquivo de entrada com o ´J´ do exemplo. 

 

Veja se consegue ler

 

mostre na tela ou não vai saber se leu

 

vai saber que deu certo quando ver o J :) 

 

depois arrume a função que grava e use CLARO a função que lê para ler e a função que mostra para mostrar e quando ver o mesmo J saberá que provavelmente terminou o programa

 

:)

 

Na verdade não está errado. Só é um jeito ruim de escrever e dificulta sua vida

NUNCA defina um tipo como ponteiro. C já resolveu isso: um ponteiro é identificado por um asterisco. O simples.

 

Se usar como está escrito aí eis o que vai acontecer: ao ler o programa nunca saberá o que é o que e terá que ficar indo atrás das definições. Um b. obagem.

 

Se está no enunciado, paciência. Mas não deixe isso como hábito. É frágil e só atrapalha você e todo mundo que for ler o código

1514885460_arquivoJ.png.a340aa1abd15e92d7e763cd4673b6024.png

 

Esse é o começo: o simples. Leia como está a direita, crie o que está à esquerda.

 

leia como pts, grave como pbm. mostre na tela, grave e leia de volta. mostre para ver se está igual. É isso.

 

Sugiro fazer nessa ordem

  • Curtir 1
Postado

Já consegui fazer grande parte , só está faltando agora preencher o vetor com imagem 0 e ler as coordenadas i,j e preencher a posição correspondente com 1 .

 

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
        }
        fgets (linha,1000,f);
        while (linha[0]== '#')
        fgets (linha,1000,f);
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        fscanf (f, "%d",img + i);
        
    }
    // Falta fazer
    // 1. preencher o vetor imagem com zeros
    // 2. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
 
    fclose(f);
    return img;
}

 

50 minutos atrás, arfneto disse:

Se usar como está escrito aí eis o que vai acontecer: ao ler o programa nunca saberá o que é o que e terá que ficar indo atrás das definições. Uma bobagem.

 

Se está no enunciado, paciência. Mas não deixe isso como hábito. É frágil e só atrapalha você e todo mundo que for ler o código

1514885460_arquivoJ.png.a340aa1abd15e92d7e763cd4673b6024.png

 

Esse é o começo: o simples. Leia como está a direita, crie o que está à esquerda.

 

leia como pts, grave como pbm. mostre na tela, grave e leia de volta. mostre para ver se está igual. É isso.

 

Sugiro fazer nessa ordem

Entendo e concordo com você , mas infelizmente sou obrigado a seguir desse jeito se não o professor não aceita kkkk. Acho errado isso mas fazer o que ? 😕

  • Curtir 1
Postado
5 minutos atrás, BifeProgramador disse:

Já consegui fazer grande parte , só está faltando agora preencher o vetor com imagem 0 e ler as coordenadas i,j e preencher a posição correspondente com 1

 

:) Como consegui passar adiante sem ler as coordenadas?

 

leia duas a duas com fscanf(). É mais simples

  • Curtir 1
Postado
3 minutos atrás, arfneto disse:

:) Como consegui passar adiante sem ler as coordenadas?

 

leia duas a duas com fscanf(). É mais simples

Eu fiz isso mas não sei se está certo...

 

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    int i, contador;
    f = fopen (name, "wt");
    if (f==NULL)
    {
        return;
    }
    fputs("P1\n",f);
    fputs("#Olá, bem vindo a atividade6.c\n",f);
    fprintf (f, "%d %d\n", nc , nl);

    contador = 0;
    for (i=0; i < nl * nc; i++)
    {
        fprintf (f, "%d ", img [i]);
        contador++;
        if (contador == 100)
        {
           fprintf (f, "\n");
           contador = 0;
        }
    }

    fclose(f);
}

No caso eu tenho que  gravar os 0's ou 1's da imagem e no máximo 100 valores por linha

 

  • Curtir 1
Postado

Se tivesse feito como eu disse não teria essa dúvida.... :)

 

Teste o retorno de fscanf se não voltar 2 cancele o programa.... Use o arquivo como eu te mostrei

 

  • Curtir 1
Postado
39 minutos atrás, arfneto disse:

leia duas a duas com fscanf(). É mais simples

No caso eu coloco isso ?

fscanf (f, "%d",i);
fscanf (f, "%d",j);

 

Eu queria saber tambem como preencher os vetores com 0 e como posso preencher essas coordenadas...

 

Se tivesse algum exemplo onde me demonstrasse o que é pra fazer ficaria mais claro, não consigo entender muito bem apenas com instruções.

  • Curtir 1
Postado

image.png.6b362bf5add2b29725adb43531f71a1b.png

 

 

Se vai ler duas a duas não vai ler uma a uma... 

 

	int n = fscanf( "%d %d", &i, &j );

 

E TESTE o retorno ou nunca vai saber se leu 2. Ou vai saber quando o programa cancelar

 

2 horas atrás, arfneto disse:

Teste o retorno de fscanf se não voltar 2 cancele o programa.... Use o arquivo como eu te mostrei

 

O programa como recebeu é muito ruim :( . Espero que tenha sido de propósito e que seu instrutor não ache que está bom...

 

2 horas atrás, BifeProgramador disse:

apenas com instruções

 

"apenas instruções" é algo divertido. 

 

Como seria melhor?  sem instruções então?

 

Eu te disse como fazer, e você está indo por outro caminho. OK, OK, eu só disse porque você perguntou e deve, claro, fazer como achar mais fácil.

 

Só que parece não estar sendo fácil. É o terceiro dia com isso, não é?

 

 

  • Curtir 1
Postado
1 hora atrás, arfneto disse:

Como seria melhor?  sem instruções então?

 

Eu te disse como fazer, e você está indo por outro caminho. OK, OK, eu só disse porque você perguntou e deve, claro, fazer como achar mais fácil.

 

Só que parece não estar sendo fácil. É o terceiro dia com isso, não é?

Eu entendo que está apenas respondendo é que eu quis dizer que quando fala "Faça isso, coloque tal coisa em tal lugar" eu não entendo muito bem, eu entendo melhor quando demonstra onde fazer e algum exemplo. E realmente não está sendo fácil, só agora que estou conseguindo avançar mais.

 

2 horas atrás, arfneto disse:
	int n = fscanf( "%d %d", &i, &j );

Entendi

 

2 horas atrás, arfneto disse:

O programa como recebeu é muito ruim :( . Espero que tenha sido de propósito e que seu instrutor não ache que está bom..

Com certeza não foi proposital kkkkkkk

2 horas atrás, arfneto disse:
int n = fscanf( "%d %d", &i, &j );

image.thumb.png.290a50c7b7c957076d46ea7ddc8e1779.png

  • Curtir 1
Postado
3 minutos atrás, arfneto disse:

poste o código todo. Não um erro. É preciso saber como você declarou essas coisas

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");
        }
        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);
        
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        
        for (j=0; j < (*nl) * (*nc); j++)
        {
    
        fscanf (f, "%d",img + i);

        n = fscanf( "%d %d", i, j );
     
        
        }
    }
  fclose(f);
    return img;
}

 

  • Curtir 1
  • Triste 1
Postado
4 minutos atrás, arfneto disse:

Então eu pego esse pedaço., edito no resto do programa que está acima e aí gero um arquivo pra eu poder compilar????

Essa é a função que ler a imagem , vou deixar o código todo pra ficar mais fácil

 

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

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    int i, contador;
    f = fopen ("name.txt", "wt");
    if (f==NULL)
    {
        return;
    }
    fputs("P1\n",f);
    fputs("#Olá, bem vindo a atividade6.c\n",f);
    fprintf (f, "%d %d\n", nc , nl);

    contador = 0;
    for (i=0; i < nl * nc; i++)
    {
        fprintf (f, "%d ", img [i]);
        contador++;
        if (contador == 100)
        {
           fprintf (f, "\n");
           contador = 0;
        }
    }

    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");
        }
        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);
        
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        
        for (j=0; j < (*nl) * (*nc); j++)
        {
    
        fscanf (f, "%d",img + i);

        n = fscanf( "%d %d", i, j );
     
        
        }
    }
    // Falta fazer
    // 1. preencher o vetor imagem com zeros
    // 2. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
 
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformation
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

Postado
        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);       
        sscanf (linha, "%d %d", nc , nl);

 

O que é isso?

 

Vai ler linha e aí vai ter esse loop? Mas o enunciado nada fala sobre isso. Os comentários vão no arquivo pbm.
 

    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.


Vou dizer pela terceira vez para testar o retorno de scanf()...

 

 

 

 

   for (i=0; i < (*nl) * (*nc); i++)
   {       
        for (j=0; j < (*nl) * (*nc); j++)
        {
            fscanf (f, "%d",img + i); 
            n = fscanf( "%d %d", i, j );            
        }
    }

 

Também não consigo entender essa parte.... 

 

um scanf() sem testar o retorno e lendo do arquivo, outro lendo do teclado dois valores, mas sem testar?

 

Talvez devesse ir mais devagar

 

 

 

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");

 

Ou eu não entendi nada do problema ou está tudo errado....

 

Como pode dar erro ao criar o arquivo se não está criando arquivo algum?

 

Onde arrumou esse P1 ?  Isso vai indicar na saída que é um arquivo do tipo 1.... na saída.

 

O que pretende com um puts() DEPOIS do return? Se já retornou não vai puts() nada...

 

O compilador não deu erro nisso?

 

 

 

 

6 minutos atrás, BifeProgramador disse:

Essa é a função que ler a imagem , vou deixar o código todo pra ficar mais fácil

Pois é. Era o que eu esperava.

 

Eu sei que essa é a função que lê. Mas eu não ia ficar recortando trechos de programa

 

Entendeu as coisas que te mostrei??? 

 

Está muito confuso e complicado o programa. Você misturou as coisas.

Postado
6 minutos atrás, arfneto disse:
fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);       
        sscanf (linha, "%d %d", nc , nl);

 

O que é isso?

Lê e verifica se tem comentário, e se tiver ele ler o comentário 

 

14 minutos atrás, arfneto disse:
   sscanf (linha, "%d %d", nc , nl);

Lê o numero de linhas e colunas

Postado

Está errado

 

Devia fazer como te expliquei :( 

 

E não leu o que escrevi há pouco? Está confundindo tudo.

 

Não há comentários na entrada. Não cria arquivos na entrada, Não lê do teclado em momento algum! Leia o enunciado de novo...

 

 

 0 vou escrever uma 4a vez: teste o retorno de scanf()

image.png.d422f22d5125cfad91c08b38c32a2b37.png

 

 

?????

Veja o que te falei no primeiro post :(

 

Teste com o exemplo....

 

10 6
11
0 4
1 4
2 4
3 4
4 4
5 4 
6 0
6 4
7 1
7 2
7 3

 

O simples J....

 

 

Como eu te mostrei e como está no seu enunciado.... O simples.

 

 

image.png.1c6f0269a7300435a149edbaba54e8be.png

 

É muito mais fácil quando você sabe o que esperar.

 

É o que estou tentando te dizer...

 

Aquele arquivo tem que gerar esse arquivo, o simples. O comentário é irrelevante. Desde que tenha um

O número "magico" nada tem de mágico. Apenas o tal programa eog no linux vai rodar isso e mostrar a imagem, ou o i_view32 no Windows. 

 

Leia o programa que recebeu... o número nada mágico indica se é uma imagem colorida, preto e branco ou o tal PBM ASCII. No caso o 1

Postado
18 minutos atrás, arfneto disse:

Está errado

 

Devia fazer como te expliquei :( 

 

E não leu o que escrevi há pouco? Está confundindo tudo.

 

Não há comentários na entrada. Não cria arquivos na entrada, Não lê do teclado em momento algum! Leia o enunciado de novo...

 

 

 0 vou escrever uma 4a vez: teste o retorno de scanf()

Não tem como eu testar se não está completo .

Como vou testar o J sem ter implementado ainda a leitura nas linhas e colunas e transformar em 1 ? 

Postado
18 minutos atrás, BifeProgramador disse:

Não tem como eu testar se não está completo .

Como vou testar o J sem ter implementado ainda a leitura nas linhas e colunas e transformar em 1 ?

 

Leu tudo o que eu expliquei? Tem vários problemas no seu código.

 

Um simples loop depois de ler já testa o J: vai ver um J na tela, se fizer como eu disse

 

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!