Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

darkangel_13

Erro de leitura

Recommended Posts

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]

Share this post


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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites
darkangel_13

então quer dizer que quando utilizo char nome[20] basicamente tou a criar uma string ?

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites
darkangel_13

hum mas porque é que eu para dizer que vou trabalhar com char nome[20] tem de ser com %s e não %c

Share this post


Link to post
Share on other 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

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!

Share this post


Link to post
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

×

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.