Ir para conteúdo

POWERED BY:

Arquivado

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

Mortalzera

[Resolvido] Como receber uma string com espaço em C ?

Recommended Posts

Bom gente gostaria de saber como que eu faço uma variavel registro receber uma string com espaço :

 

CODE
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

 

struct clientes {

int n_cliente;

char endereco[30];

int telefone;

};

struct notas {

int numero_fn;

int c_cliente;

int total_geral;

};

struct itens_notas{

int numero_nf;

int c_produto;

int quantidade;

float p_venda;

};

struct produtos {

int cod_produto,unidade,estoque;

char descricao[30];

float p_unidade;

};

 

struct clientes x[3];

struct notas y[6];

struct itens_notas z;

struct produtos w;

 

void consulta();

void movimentacao();

 

 

 

int menu(){

int e;

system("clear");

printf("=== 1- Cadastro ===\n\n");

printf("=== 2- Movimentações ===\n\n");

printf("=== 3- Consultas ===\n\n");

printf("=== 4- Saída ===\n\n");

printf("Opção : ");

scanf("%d", &e);

 

return e;

}

 

void cadastro(){

int a,e,e1,i;

char string[30], string1[30], string0[1];

while(e != 4){ system("clear");

printf("\n\n1-Incluir Clinte\n\n");

printf("2-Alterar Clinte\n\n");

printf("3-Excluir Clinte\n\n");

printf("4-Sair\n\n");

printf("Opção : ");

scanf("%d", &e);

 

 

 

 

switch (e){

case 1 : system("clear");

printf("Quantos deseja incluir ? : \n");

scanf("%d", &a);

for(i = 0; i < a;i++){

printf("\nDigite o codigo do cliente : ");

scanf("%d", &x.n_cliente);

printf("\nDigite o endereço do cliente : ");

scanf("%s", &string); // string0 é uma variaval char q não tem nenhum valor //eu uso pra reseta o x.endereco

strcpy(x.endereco,string); // PARTE QUE O ENDEREÇO RECEBE UMA STRING

printf("\nOperação concluida com sucesso, cliente %s foi adicionado \n\n",string);

}

break;

case 2 : system("clear");

for(i =0; i<a;i++){

printf("%d\n\n", i, x.n_cliente);

}

printf("\n\nQual você deseja alterar ?");

scanf("%d", &e1);

printf("%s", x[e1].endereco);

printf("Digite o novo endereço : ");

scanf("%s", &string1);

strcpy(x[e1].endereco,string0); // PARTE QUE O ENDEREÇO RECEBE UMA STRING

strcpy(x[e1].endereco,string1);

 

printf("%d", x[e1].telefone);

printf("\n\nDigite o novo número : ");

scanf("%d", &x[e1].telefone);

break;

 

}

 

 

}

}

 

 

int main(){

 

int e;

 

while (e != 4) { e = menu();

 

switch (e) {

 

case 1 : cadastro();

break;

// case 2 : movimentacao();

break;

// case 3 : consulta();

break;

case 4 : return 0;

 

 

}

}

}

 

Bom a parte comentada que ta dando problema.

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use fgets como temos comentado.

Ela limita a entrada evitando estouro de buffer.

Vlw's deu certo, gostaria de saber qual a diferença entre fgets e gets, pelo o que eu entendi fgets não limita o tamanho da string.

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui não deu certo Isis.

não sabia que scanf limitava quantidade também.

Vou pesquisar sobre isso.

 

Só pra ficar mais claro essa parte: [^\n]

Fala para o scanf armazernar o conteúdo do buffer de entradas na variável até encontrar um \n.

 

scanf("%TAMANHO-2[^\n]",&string);

string[TAMANHO-1] = '\0';

 

também serve.

A diferença é que gets não limita a quantidade de caracteres na entrada.

Esse função não deve ser usada, pois facilmente pode causar estouro de buffer.

 

Vlw's deu certo, gostaria de saber qual a diferença entre fgets e gets, pelo o que eu entendi fgets não limita o tamanho da string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isis@linux-0khy:~/src> ./a.out

asjdhjashdj111

 

 

===asjdhjas

 

O gcc gera um warning sobre o tipo do negócio,mas funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites
O problema aqui está no número TAMANHO-2

Se colocar o número direto funciona.

 

...... NÃO me diga que você escreveu 10-2 no scanf....

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é uma característica do scanf(), presente no C ANSI, chama scanset

Aqui não deu certo Isis.

não sabia que scanf limitava quantidade também.

Vou pesquisar sobre isso.

aqui rodou de boa, inclusive no DEV...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, eu usei TAMANHO como constante.

:P

 

Valeu pela dica Isis!

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

O problema aqui está no número TAMANHO-2

Se colocar o número direto funciona.

...... NÃO me diga que você escreveu 10-2 no scanf....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema de fgets, é que sempre vem um \n junto, tem como evitar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem como retirar o \n da string assim:

 

string[strlen(string) - 1] = '\0';

o problema de fgets, é que sempre vem um \n junto, tem como evitar isso?

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.