Ir ao conteúdo

Posts recomendados

Postado

tenho uma duvida de como fazer a leitura de uma string

minha leitura

scanf(" %s %f",produtoc,&qtd);

tenho que ler uma string com nome e um float separado por um espaço;

ate então normal lê mais quando vou imprimir só esta saindo a ultima string lida  e o resto nada;

minha saida5a220e2dc9c01_Capturadetelade2017-12-0200-20-27.thumb.png.059d3ca0b7f7ec76d427b27753b95ea2.png

Postado
16 horas atrás, vangodp disse:

mande o programa para averiguar

 

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
    char produto[50];
    float preco;

}f;


int main() {
    f feira;



     	int n,i,j,k;
    	scanf("%d",&n);
	for(i=0;i<n;i++) {
	int qtdp;
	scanf("%d",&qtdp);
	f vet[qtdp];

	for(j=0;j<qtdp;j++){
        printf("informe o produto\n");
	scanf("%s %f",feira.produto,&feira.preco);
	vet[i]=feira;
	}
	for(j=0;j<qtdp;j++){
	printf("%s %f\n",vet[j].produto,vet[j].preco);

    	}
	}

	return 0;
}

 

adicionado 2 minutos depois

@vangodp so esta salvando o ultimo o resto se  perde.

Postado

@vangodp

16 horas atrás, vangodp disse:

vamos lá...
Primeiro você não deve por espaços entre especificadores dentro do scanf. El fato de usar especificadores como " %s %d", com espaços, pode certamente gerar erros no seu programa pois um espaço em scanf significa uma coisa completamente diferente em scanf e em printf. No printf um espaço é um espaço, mas no scanf um espaço quer dizer que você quer ignorar um espaço, e dependendo de onde vai o espaço quer dizer outra coisa, como por exemplo antes de um especificador, pode ignorar por exemplo a supressão do caractere enter em uma leitura anterior. Em outras palavras, a menos que queira ignorar certos caracteres com scanf não use espaços no scanf.
Segundo e mais importante é que você esta lendo sem limpar o buffer, isso gera outros tantos problemas ao ler chars e strings com outras variáveis de por meio. Procure limpar o buffer antes de ler um char ou uma string, ou você pode levar esse tipo de surpresas.
Dicas:
Tome o nome e numero em scanfs separados, o programa deveria funcionar meio assim:
Informe o nome: tomate
quantidade: 3

Em código seria algo como:
Informe o nome: tomate
preço: 3
 


    f lista[100];
    
    printf("Informe o nome: ");
    scanf("%s", lista[0].produto); 
    printf("valor: "); 
    scanf("%s", &lista[0].preco);
    //Limpar buffer aqui... antes de uma nova leitura
    printf("Informe o nome: ");
    scanf("%s", lista[1].produto); 
    printf("valor: "); 
    scanf("%s", &lista[1].preco);
    //Limpar buffer aqui... antes de uma nova leitura
    ...

 

muito obrigado por sua ajuda, mais percebi que colocou %s para a leitura de inteiro.

Bom meu compilador não reconheceu mais eu também tinha errado, era um valor flutuante. 

Pois bem meu código ficou desta forma eu tinha que ler o numero de ida a um supermercado/feira por exemplo, e depois ler o numero de produtos de estoque, depois em um loop eu ia pegar o nome e o valor, depois de pegar todos eu pego o numero de itens que ela comprou, depois disso o usuário informa o nome do produto e a quantidade comprada depois computa e no fim mostra o valor das idas ao supermercado/feira.

OBS:  para onde eu precisava do código não poderia existir printfs a não ser o da saída.5a230cd104743_Capturadetelade2017-12-0218-26-33.thumb.png.b27460d1f39f47b0e7cfe28e808b4541.png

meu codigo;

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
    char produto[50];
    float preco;

}f;
typedef struct{
    char item[50];
    int quantidade;
}c;


int main() {
    int n,i,j,k,g,m;
    float veto[1000];
    //quantidade de loop
    scanf("%d",&n);
	for(i=0;i<n;i++) {
        int qtdp;
        scanf("%d",&qtdp);
        f lista[qtdp];
            for(m=0;m<qtdp;m++){
        //printf("Informe o nome: ");
        scanf("%s",lista[m].produto);
        //printf("valor: ");
        scanf("%f",&lista[m].preco);
    }
    int qtdc;
    scanf("%d",&qtdc);
    c compra[qtdc];
    for(j=0;j<qtdc;j++){
        //printf("Informe o nome: ");
        scanf("%s",compra[j].item);
        //printf("valor: ");
        scanf("%d",&compra[j].quantidade);
    }
    float vet[qtdc];
    int res;
    for(k=0;k<qtdc;k++){
            for(g=0;g<qtdp;g++){
                //comparaçao de elemento
                res=strcmp(compra[k].item,lista[g].produto);
                //se 0 sao igual
                //se nao fazer nada
                if(res==0){
                vet[i]=vet[i]+compra[k].quantidade*lista[g].preco;


            }
        }

    }
    //passagem de vetor pra fora do loop;
    veto[i]=vet[i];
	}
	for(j=0;j<n;j++){
            printf("R$ %.2f\n",veto[j]);
    }

	return 0;
}

 

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!