Jump to content

Erro de leitura


Guest darkangel_13

Recommended Posts

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]

Link to comment
Share on other sites

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]
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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

Edited by 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!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.