Problema no compilador [RESOLVIDO]

1. Problema no compilador [RESOLVIDO]

José Alan Torres Pires
alanp1

(usa Outra)

Enviado em 06/06/2020 - 20:41h

Olá pessoal, utilizo o sublimetext para editar meu código em C, entretanto quando importo a biblioteca stdlib.h, o compilador(executo no terminal) mostra um erro. Tem algum pacote que é necessário baixar para solucionar o problema?



  


2. Re: Problema no compilador [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 06/06/2020 - 21:07h

Poste o código e o erro para analisarmos, senão não tem como dar palpite do que pode ser. Muito provavelmente pode ser erro no próprio código, um erro de digitação talvez...


3. Re: Problema no compilador [RESOLVIDO]

José Alan Torres Pires
alanp1

(usa Outra)

Enviado em 06/06/2020 - 21:46h

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

int main(){
char log[], sen[];
int key=0;
char login[]="admin";
char senha[]="qwerty";

while(key==0){
printf("Digite o login: ");
scanf("%s", &log);
printf("Digite a senha: ");
scanf("%s",&sen);
if((strcmp(login, log)==0 )&&(strcmp(sen,senha)==0)){
key=1;
}

}
printf("Logado com sucesso!!!");
}


4. Re: Problema no compilador [RESOLVIDO]

José Alan Torres Pires
alanp1

(usa Outra)

Enviado em 06/06/2020 - 21:50h

Fiz algumas modificações, ele executa, mas ainda apresenta esse erro:
atv6.c: In function ‘main’:
atv6.c:206:7: error: array size missing in ‘log’
char log[], sen[];
^~~
atv6.c:206:14: error: array size missing in ‘sen’
char log[], sen[];
^~~
atv6.c:213:11: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[1]’ [-Wformat=]
scanf("%s", &log);
~^ ~~~~
atv6.c:215:11: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[1]’ [-Wformat=]
scanf("%s",&sen);



5. Re: Problema no compilador

Heitor Costa
Heitor.rj

(usa Slackware)

Enviado em 07/06/2020 - 02:11h

alanp1 escreveu:
Fiz algumas modificações, ele executa, mas ainda apresenta esse erro:
atv6.c: In function ‘main’:
atv6.c:206:7: error: array size missing in ‘log’
char log[], sen[];
^~~
atv6.c:206:14: error: array size missing in ‘sen’
char log[], sen[];
^~~
atv6.c:213:11: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[1]’ [-Wformat=]
scanf("%s", &log);
~^ ~~~~
atv6.c:215:11: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[1]’ [-Wformat=]
scanf("%s",&sen);

Alan, vc precisa estudar mais sobre como declarar uma variável. Isso vai te ajudar muito, porque é a base para muito do que você irá fazer. Estude como declarar char, int, float, double...

Precisa claro também aprender a ler os erros do Compilador, porque ele já está informando tudo o que vc precisa para consertar o seu código e inclusive apontando onde vc escreveu errado! Com o tempo vai se acostumar a interpretar o que ele informa!

Compile sempre assim: Se passar por isso, seu código estará melhor, se não passar, precisa consertar!
gcc Test.c -o Test -O3 -Wall -pedantic -pedantic-errors -Werror 

Consertei seu código adicionando as explicações de onde estava errado!
#include <stdio.h>
//#include <stdlib.h> // Não precisa disso!
#include <string.h>

int main(void) {
/* VOCÊ NÃO PODE DECLARAR ASSIM: Ou é um vetor de caracteres ou é 1 caracter! para declarar vetor já que vai armazenar um texto, vc precisa informar a Qtd de caracteres que esse texto terá!
Nessa situação seria bom vc estudar como declarar variáveis, vai te ajudar bastante! */
//char log[], sen[]; // ERRADO!

char log[101], sen[101]; // Declarei para 100 Caracteres

int key = 0;
char login[] = "admin";
char senha[] = "qwerty";

while(key == 0) {
printf("Digite o login: ");

// isso está bugado e não vai funcionar corretamente porque precisa tratar o lixo do Buffer
//scanf("%s", &log);
scanf("%100[^\n]", log); // Pega até 100 caracteres digitados
while(getchar() != '\n'); // Para Limpar o Buffer, ou seja, os caracteres restantes que foram ignorados no scanf

printf("Digite a senha: ");

// isso está bugado e não vai funcionar corretamente porque precisa tratar o lixo do Buffer
//scanf("%s",&sen);
scanf("%100[^\n]", sen); // Pega até 100 caracteres digitados

while(getchar() != '\n'); // Para Limpar o Buffer, ou seja, os caracteres restantes que foram ignorados no scanf

// Coloquei senha na frente para ficar na mesma ordem do login, pois estava invertido
if((strcmp(login, log) == 0) && (strcmp(senha, sen) == 0))
key = 1;

// Você também poderia declarar assim, sem usar as 2 variáveis que vc declarou acima, reduzindo a qtd de código escrito.
// if((strcmp("admin", log) == 0) && (strcmp("qwerty", sen) == 0))
}
printf("Logado com sucesso!!!\n");
}






6. Re: Problema no compilador [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 07/06/2020 - 11:07h

Vamos por partes. Em c, strings são tratadas como vetor de char. Então para declarar uma string, precisamos declarar um vetor de char:
char string[] 
Daqui, nós temos três opções:
1- Criar uma string vazia. Dessa forma, precisamos informar o tamanho do vetor.
char string[101];  // Armazena 100 caracteres 

2- Criar uma string devidamente preenchida. Nesse caso, podemos omitir o tamanho do vetor.
char string[] = "Essa e minha string.";  // O tamanho do vetor será identificado automaticamente 
O problema aqui é que se você precisar armazenar mais caracteres, não vai conseguir.

3- Criar uma string preenchida com tamanho definido.
char string[255] = "Oi";  // Esta usando 3 caracteres, mas pode armazenar ate 254 
Nesse exemplo, a string está preenchida ocupando um certo espaço, mas caso seja necessário, pode armazenar mais caracteres.

Você não pode declarar uma string vazia sem definir o tamanho dela. Esse é justamente o erro que o compilador está informando.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts