Ir ao conteúdo
  • Cadastre-se

C strcmp, erro na utilização


123qwe18

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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 3
Link para o comentário
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
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...