Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
123qwe18

C strcmp, erro na utilização

Recommended Posts

estou fazendo um codigo onde o objetivo é um sistema de controle de uma livraria, porém quando vou compilar diz que a função strcmp é apenas para comparar constantes (pedaço do código)

//sistema "biblioteca":
#include <stdio.h>
#include <string.h>
void main(){
	typedef struct{
		char name[100], autor[100], local[100];
		int quant;
	}livro;
	typedef struct{
		char nome;
		int matr, pend;
	}user;
	char namesearch;
	int opc, i, a, b, c, d, e, verify;
	livro abc[i];
	user def[d];
	a = 1;
  
  else if(opc == 3){
			e = 1;
			while(e == 1){
				printf("\n\t\tBiblioteca UEG\n\n\tEmprestimo.\nNome do livro: ");
				scanf("%c", &namesearch);
				c = 1;
				while(c == 1){
					a = 1;
					verify = strcmp(namesearch, abc[a].name);
					a++;
					if(a > i || verify == 0){
						c++;
					}
				}
				if(verify == 0){
					a = a - 1; b = 1;
					printf("\n\nDigite N. matricula do aluno: ");
					scanf("%d", &verify);
					while(b < d){
						if(verify != def[b].matr){
						b++;
						}
						else{
							if(def[b].pend == 0){
								printf("\n\nemprestimo aprovado\nLivro encontra-se em: %c", abc[a].local);
								abc[a].quant = abc[a].quant - 1;
								e = 2; b = d + 1;
								def[b].pend = 1;
							}
							else{
								printf("\n\nO usuario possui pendencias");
								getchar();
								e = 2; b = d + 1;
							}
						}
					}
				}
				else{
					printf("\nLivro não encontrado, tente outro nome");
				}
			}
		}
  
  
  
  

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função strcmp() serve para comparar strings, mas namesearch é apenas um único caractere, então você está tentando comparar um caractere com uma string (vetor de caracteres) e dá erro.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, isrnick disse:

A função strcmp() serve para comparar strings, mas namesearch é apenas um único caractere, então você está tentando comparar um caractere com uma string (vetor de caracteres) e dá erro.

 

Resumindo:

A declaração do namesearch está errada.

 

Acho que basta declarar assim:

char namesearch[100];

Quer seria o tamanho do nome.

adicionado 23 minutos depois


PS:

 

1#

Sobre:

1 hora atrás, 123qwe18 disse:

    int opc, i, a, b, c, d, e, verify;
    
    livro abc[i];
    user def[d];

 

Perceba que i e d não foram inicializados... ou seja, qual é o valor deles nesse momento? Ou você primeiro ler os valores de i e d para só depois criar os vetores, ou cria os vetores com um tamanho grade o suficiente para caber os os cadastro que deseja, ou cria um vetor dinâmico... ou faz qualquer outra coisa, o que não pode é declara assim...

 

Se tiver dúvidas sobre essa parte é só perguntar.

 

 

 

2#

Sobre:

1 hora atrás, 123qwe18 disse:

	livro abc[i];
	user def[d];

 

Por que está usando as nomenclaturas abc e def? esses termos não me fazem sentido... então, o código não está completo, daí não dá para tirar muitas conclusões..  mas de um modo geral sugiro utilizar nomenclaturas mais sugestivas. Ex.:

typedef struct{
        char name[100], autor[100], local[100];
        int quant;
    } Livro;
    typedef struct{
        char nome;
        int  matr, pend;
    } Usuario;


    Livro   livros[i];
    Usuario usuarios[d];

Entende? O "L" maiúsculo no struct para indicar que é uma "classe" ou "o tipo"... minúsculo para as variáveis e no plural porque é um vetor... por ai vai... :)

 

OBSERVAÇÃO: Lembrando que essa declaração usando i e d , desta forma que foi feita, está incorreta... assim como citado no 1#;

 

 

 

3#

Tem uma dica muito simples... NÃO TENTE FAZER TUDO DE UMA VEZ. Faça o programa por etapas e vá testando... ai vai progredindo aos poucos.

 

Por exemplo, implemente apenas a declaração do cadastro de livros, após coloque para imprimir os dados na tela... desta forma, você já verifica se os dados estão sendo cadastrados corretamente... ou seja, caso o seu código esteja com problema no cadastro (que vem antes), como seria possível efetuar comparações?

 

 

4#

Para uma melhor indentação, sugiro que "remova a tabulação do seu código", ou seja, "faça-o inserir espaço no lugar da tabulação". Essa configuração depende do compilador... mas de um modo geral fica em "configurações" ou "opções do editor"... ou algo do tipo.

 

Por que não usar tabulação? tem "n" motivos, sem sei explicar agora, rs... (não é tão importante no momento... como diria o poeta: «só sei que é assim». Se tiver interesse dá uma pesquisada)

 

 

***

 

RESUMINDO:

Minha sugestão é que deixe esse código separado.. comece um novo implementando por etapas. Faça apenas ler um livro e imprime este na tela. Depois implemente a leitura de n livros... ao implementar os usuários, verás que é semelhantes, daí já pode tentar implementar direto.. faz testes... vê se tá rodando certo... por ai vai...  A medida que vai ganhando experiência, vai implementado mais coisas de vez (já que já "domina" o que está fazendo).

 

No aguardo.

 

  • Curtir 4

Compartilhar este post


Link para o post
Compartilhar em outros sites
//sistema "biblioteca":
#include <stdio.h>
#include <string.h>
void main(){
	typedef struct{
		char name[100], autor[100], local[100];
		int quant;
	}livro;
	typedef struct{
		char nome;
		int matr, pend;
	}user;
	char namesearch;
	int opc, i, a, b, c, d, e, verify;
	livro abc[i];
	user def[d];
	a = 1;
//menu:
	while(1){
		printf("\n\t\tBiblioteca UEG\n\n1 - Registrar livro.\n2 - Registrar usuario\n3 - Emprestimo\n4 - Devolução\n\nO que deseja fazer?(numero da acao)");
		scanf("%d", &opc);
	//registro livro:
		if(opc == 1){
			c = 1;
			while(c == 1){
				printf("\n\t\tBiblioteca UEG\n\n\tRegistro de livros.\nNome do livro: ");
				scanf("%c", &abc[a].name);
				printf("\nNome do autor: ");
				scanf("%c", &abc[a].autor);
				printf("\nQuantidade adquirida: ");
				scanf("%d", &abc[a].quant);
				printf("\nLocal a ser armazenado:(Ex:Corredor C, lado esquerdo, prateleira 5) ");
				scanf("%c", &abc[a].local);
				a++; i = a - 1;
				printf("Deseja registrar outro lote? (1 - sim; 2 - nao)");
				scanf("%d", &c);

			}
		}
	//registro usuario
		else if(opc == 2){
			c = 1;
			while(c == 1){
			printf("\n\t\tBiblioteca UEG\n\n\tRegistro de usuarios.\nNome do aluno: ");
			scanf("%c", &def[b].nome);
			printf("\nDigite numero de matricula: ");
			scanf("%d", &def[b].matr);
			def[b].pend = 0;
			b++; d = b - 1;
			printf("Deseja registrar outro aluno? (1 - sim; 2 - nao)");
			scanf("%d", &c);
			}
		}
	//emprestimo
		else if(opc == 3){
			e = 1;
			while(e == 1){
				printf("\n\t\tBiblioteca UEG\n\n\tEmprestimo.\nNome do livro: ");
				scanf("%c", &namesearch);
				c = 1;
				while(c == 1){
					a = 1;
					verify = strcmp(namesearch, abc[a].name);
					a++;
					if(a > i || verify == 0){
						c++;
					}
				}
				if(verify == 0){
					a = a - 1; b = 1;
					printf("\n\nDigite N. matricula do aluno: ");
					scanf("%d", &verify);
					while(b < d){
						if(verify != def[b].matr){
						b++;
						}
						else{
							if(def[b].pend == 0){
								printf("\n\nemprestimo aprovado\nLivro encontra-se em: %c", abc[a].local);
								abc[a].quant = abc[a].quant - 1;
								e = 2; b = d + 1;
								def[b].pend = 1;
							}
							else{
								printf("\n\nO usuario possui pendencias");
								getchar();
								e = 2; b = d + 1;
							}
						}
					}
				}
				else{
					printf("\nLivro não encontrado, tente outro nome");
				}
			}
		}
		else if(opc == 4){
			e = 1;
			while(e == 1){
				printf("\n\t\tBiblioteca UEG\n\n\tDevolucao.\nNome do livro: ");
				scanf("%c", &namesearch);
				c = 1;
				while(c == 1){
					a = 1;
					verify = strcmp(namesearch, abc[a].name);
					a++;
					else if(a > i || verify == 0){
						c++;
					}
				}
				if(verify == 0){
					a = a - 1; b = 1;
					printf("\n\nDigite N. matricula do aluno: ");
					scanf("%d", &verify);
					while(b < d){
						if(verify != def[b].matr){
						b++;
						}
						else{
							if(def[b].pend == 1){
								printf("\n\nColoque o livro em: %c", abc[a].local);
								abc[a].quant = abc[a].quant + 1;
								e = 2; b = d + 1;
								def[b].pend = 0;
							}
						}
					}
				}
			}
		}
		else{
			return 0;
		}
	}
}

aqui está o código completo, e realmente eu fiz todo de uma vez kkk(utilizei uma documentação feita na aula para estudar a linguagem)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×