Ir para o conteúdo
darkangel_13

Erro de leitura

Mensagens Recomendadas

darkangel_13

Boa tarde estou a iniciar em C e estou a ter aqui uns problemas ..

/**Ler nome, sexo e idade. Se sexo for feminino e idade menor que
25. Imprimir o nome da pessoa e a palavra ACEITA. Caso contrario
imprimir NAO ACEITA.**/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main(){
char[30] nome;
printf("Nome");
gets(nome);
char sexo;
printf("Sexo");
scanf("%c",&sexo);
printf("Idade");
int idade;
scanf("%d",&idade);
if(sexo=="F" && idade<25){
printf(" Nome : %c",nome);
printf("Aceita");
}else{
printf("Nao aceita");
}

system("PAUSE");

}

nomeSexIdad.c: Na função ‘main’:

nomeSexIdad.c:9:5: error: expected identifier or ‘(’ before ‘[’ token

nomeSexIdad.c:11:6: error: ‘nome’ undeclared (first use in this function)

nomeSexIdad.c:11:6: note: each undeclared identifier is reported only once for each function it appears in

nomeSexIdad.c:19:8: warning: comparison between pointer and integer [habilitado por padrão]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
darkangel_13

Obrigado pela resposta mas continuo com um problema

nomeSexIdad.c: Na função ‘main’:
nomeSexIdad.c:19:24: warning: comparison between pointer and integer [habilitado por padrão]
nomeSexIdad.c:20:2: warning: format ‘%c’ espera argumento do tipo ‘int’, porém o argumento 2 possui tipo ‘char *’ [-Wformat]

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg
if(sexo=="F" && idade<25){
printf(" Nome : %c",nome);

Na primeira linha estás a comparar sexo (variavel de tipo char) com "F" (literal de tipo array[2] de char). Os dois tipos não são comparaveis por isso te dá o warning (o pointer refere-se ao array e o integer refere-se à variavel)

Na segunda linha estás a usar "%c" com um array correspondente. Mas o formato "%c" espera um valor de tipo int (comummente um char) por isso o warning.

Hints:

para especificar literais de tipo caracter, delimita-os com plicas (if (sexo == 'F'))

para imprimir uma string usa o formato "%s" (printf("%s\n", nome))


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Com char nome[20]; crias um array de 20 caracteres.

Uma string não é mais do que um caso especial de array de caracteres: uma string é um array de caracteres em que um dos elementos tem o valor 0 (ou '\0').

Como o '\0' tem que fazer parte dos elementos do array, uma variavel definida como "char nome[20];" tem espaço para uma string de, no máximo, 19 caracteres.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Como disse antes, uma "string" em C é um array de caracteres que inclui o caracter de valor 0 ('\0'). Se um array de caracteres nao tiver esse elemento, pura e simplesmente não é uma string.

As funções de C que lidam com strings, precisam desse elemento com valor 0; ou já existente na string ou precisam de o escrever num dos elementos do array.

O conversor "%c" de printf() imprime um único caracter, o conversor "%s" imprime todos os caracteres até encontrar o caracter de valor 0 (que não imprime). Portanto podes imprimir tudo de uma vez usando as potencialidades internas da linguagem

char nome[20] = "John Doe";
printf("%s\n", nome);

ou imprimir um caracter de cada vez

char nome[20] = "John Doe";
size_t i = 0;
while ((i < 20) && (nome[i] != '\0')) {
 printf("%c", nome[i]);
 i++;
}
putchar('\n');

A escolha entre usar %c ou %s é tua.

Nota Os dois snippets apresentados acima não são exactamente iguais: o primeiro não verifica o tamanho da string e se o array não tiver um elemento com valor 0 ele tenta aceder a elementos fora do array (despoletando Comportamento não definido) enquanto o segundo imprime um máximo de 20 elementos, mesmo que não haja um elemento com valor 0

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.