Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Alano

[C] Erro no If, Else

Recommended Posts

Pessoal, o código não está funcionando. Visualmente está tudo correto.

 


#include <stdio.h>

int main() {
	char nome[80];
	int idade[3];

	printf ("Qual seu nome?\n");
	scanf ("%s", &nome);
	printf ("Qual sua idade?");
	scanf ("%d", idade);
	if (idade > 18) {
		printf ("Voce e menor de idade");
	} else {
		printf ("Voce e maior de idade");
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

main() precisa retornar um inteiro. Adicione "return 0;" antes da última chave "}", esse é o código de retorno "on success" por padrão.

 

Por que você declarou "idade" como vetor de inteiros? Você só está lendo uma vez a idade, e mesmo que o fizesse mais vezes, não seria necessário alocar mais espaço, a não ser que você quisesse manter o valor lido a cada iteração (o que não faria sentido, a não ser que você também declarasse "nome" como um vetor de vetores... ex: char nome[3][80]).

 

A leitura do nome está errada. Scanf() pede o endereço de onde o valor será armazenado, e &nome é o "endereço do endereço" do vetor "nome". Pra funcionar, basta usar "nome" (endereço-base do vetor declarado).

 

Tente o seguinte:

 

#include <stdio.h>

int main()
{
        char nome[80];
        int idade;

        printf ("Qual seu nome?\n");
        scanf ("%s", nome);
        printf ("Qual sua idade?");
        scanf ("%d", &idade); // como "idade" nao eh mais vetor, precisamos usar &
        if (idade < 18)
        {
            printf ("Voce e menor de idade");
        }
        else
        {
            printf ("Voce e maior de idade");
        }
        return 0;
}

 

Só tem uma coisa: scanf() é horrível. Quando há erros, mesmo que ela deixe você saber que isso aconteceu, é impossível dizer exatamente ONDE ocorreu o erro (e portanto, é MUITO difícil corrigí-lo). Pra ler strings, então, é pior ainda, porque ela "dá pau" ao tentar ler espaços (você teria que usar modificadores junto com o %s.

 

O melhor jeito de ler strings é criando uma função que aloca espaço dinamicamente, enquanto for necessário, e ler caracter por caracter. Enquanto você não souber fazer isso, use fgets(). NUNCA use gets(), pois ela não permite que você especifique número máximo de bytes (no caso do C, caracteres) pra ler, o que significa que você pode tentar jogar algo muito grande num "recipiente" muito pequeno - o que, em computação, geralmente dá em fissão nuclear.

 

Portanto o código com fgets() fica:

 

#include <stdio.h>

int main()
{
        char nome[80];
        int idade;

        printf ("Qual seu nome?\n");
        fgets(nome, sizeof(nome), stdin);
        printf ("\nQual sua idade?\n");
        scanf ("%d", &idade); // como "idade" nao eh mais vetor, precisamos usar &

        printf("\n");
        if (idade < 18)
        {
            printf ("Voce e menor de idade");
        }
        else
        {
            printf ("Voce e maior de idade");
        }
        return 0;
}

 

fgets(), como você pode ver, precisa de 3 argumentos:

 

o primeiro é o endereço onde os bytes serão copiados

o segundo é o número máximo de bytes a serem copiados. Neste caso, sizeof(nome) é igual a 80, já que foi declarado estaticamente.

o terceiro é o f. descriptor de onde você quer ler bytes.

 

A função lê até que o número máximo de bytes seja alcançado OU um '\n' seja encontrado (no caso de stdin, o sistema operacional requer que o usuário pressione "ENTER" para sinalizar que acabou de digitar, o que resulta num "\r\n", que faz com que o '\n' seja lido pela fgets() e a finalize. A string final possui um '\n' antes do '\0'.

 

Qualquer coisa pergunta aih.

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.