Ir ao conteúdo

Duvida com C no Ubuntu


capri17

Posts recomendados

Postado

É o seguinte estou aprendendo a programar agora e acabei fazendo este código:

#include <stdio.h>

#include <stdlib.h>

main ()

{

int idade,ano_atual,ano_nasc;

char nome [30]

printf ("Digite o nome:");

scanf ("%s",&nome);

printf ("%d", &ano_atual);

printf ("\n Digite o ano de nascimento:");

scanf ("%d", &ano_nasc);

idade = an_atual-ano_nasc;

printf ("\n %s você tem %d anos." , nome,idade);

getchar ( );

getchar ( );

return;

}

Mas sempre que dou o comando no terminal:

gcc meuprimeiroprograma.c -o meuprimeiroprograma.c

meu primeiro programa é como está salvo,ele retorna com o seguinte erro:

meuprimeiroprograma.c:2:5: error: expected identifier or ‘(’ before ‘+’ token

Se alguém souber me explicar o que eu estou fazendo errado,ficaria agradecido,lembrando que eu ainda sou muito leigo nesse assunto.

Postado
Bom dia.

Nos parametros do gcc, a flag "-o" define o o arquivo de saída, ou seja, output filename.

Consulte: http://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html

Você deve montar sua linha de comando assim: gcc meuprimeiroprograma.c -o meuprimeiroprograma.

O erro aponta para a linha 5, que contem:

char nome [30]

Faltou apenas um ";" no final da linha.

[]'s

Eu acabei fazendo a correção que você me falou na linha 5,mesmo assim ainda continua com o mesmo erro,vou dar uma olhada no site,afinal todo material é útil.

Postado

Meio estranho .. rs

Enfim, deixo algumas dicas então.

É uma boa prática de programação que seus programas retornem status de término ao SO, informando se o programa foi executado corretamente, ou gerou algum erro.

Defina um retorno inteiro para a função main, como no código abaixo:

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

int main()
{
int idade, ano_atual, ano_nasc;
char nome[30];

printf("Digite o nome: ");
scanf("%s",&nome);

printf("Digite o ano atual: ");
scanf("%d",&ano_atual);

printf("Digite o ano de nascimento: ");
scanf("%d",&ano_nasc);

idade = ano_atual - ano_nasc;

printf("%s: Você tem %d anos",nome,idade);
return 0;

}

Testei aqui em um Ubuntu com GCC 4.6.1.

[]'s

Postado
Meio estranho .. rs

Enfim, deixo algumas dicas então.

É uma boa prática de programação que seus programas retornem status de término ao SO, informando se o programa foi executado corretamente, ou gerou algum erro.

Defina um retorno inteiro para a função main, como no código abaixo:

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

int main()
{
int idade, ano_atual, ano_nasc;
char nome[30];

printf("Digite o nome: ");
scanf("%s",&nome);

printf("Digite o ano atual: ");
scanf("%d",&ano_atual);

printf("Digite o ano de nascimento: ");
scanf("%d",&ano_nasc);

idade = ano_atual - ano_nasc;

printf("%s: Você tem %d anos",nome,idade);
return 0;

}

Testei aqui em um Ubuntu com GCC 4.6.1.

[]'s

na linha 12 tem um erro de escrita ler se "idade = an_atual-ano_nasc;" correto "idade = ano_atual-ano_nasc;"

Você conseguiu fazer esse codigo rodar dessa forma? eu tentei aqui e não rodou deu esse seguinte erro:

warning: format ‘%s’ espera argumento do tipo ‘char *’, porém o argumento 2 possui tipo ‘char (*)[4]’ [-Wformat]

Eu também consertei o erro de escrita que o amigo falou que eu não tinha visto mesmo assim ainda não funcionou,caramba to apanhando pra caramba aqui,e obrigado pela ajuda.

Postado

Boa tarde.

Sim, na verdade não é um erro, é um warning. O seu programa funcionará normalmente.

Basta entrar no terminal e rodar o programa: ./meuprimeiroprograma

[]'s

Postado

Retire o "&" na função "scanf()":


scanf("%s",nome);

"nome" já é uma referência pra memória, pois é um vetor, logo, não precisa do "&".

O "&" usa-se quando a variável não é vetor ou ponteiro explícito.

Postado

Outro erro é o & no scanf do nome, basta remover.

Como nome é um vetor de caracteres, a própria variável passada já é o endereço do primeiro elemento.

Postado
Boa tarde.

Sim, na verdade não é um erro, é um warning. O seu programa funcionará normalmente.

Basta entrar no terminal e rodar o programa: ./meuprimeiroprograma

[]'s

Olha fiz as correções que o pessoal falou e agora deu o seguinte:

warning: format ‘%d’ espera argumento do tipo ‘int’, porém o argumento 2 possui tipo ‘int *’ [-Wformat]

isso é um erro ou só um aviso? desculpa a ignorância galera,estou aprendendo agora.

Postado

Variáveis do tipo vetor e ponteiro, não precisam do "&" na função "scanf()":


char *ponteiro;
char vetor[30];

Outros tipos, precisam. Exemplo:


char letra;

O seu código ficaria assim:


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

int main()
{
int idade, ano_atual, ano_nasc;
char nome[30];

printf("Digite o nome: ");
[B] scanf("%s", nome);[/B]

printf("Digite o ano atual: ");
scanf("%d", &ano_atual);

printf("Digite o ano de nascimento: ");
scanf("%d", &ano_nasc);

idade = ano_atual - ano_nasc;

printf("%s: Você tem %d anos",nome,idade);
return 0;

}

Sempre que retornar um "warning", quer dizer que o programa vai compilar, porém, pode acontecer (e muito provavelmente, será) de não ter o resultado esperado.

Postado

Vamos lá,fiz as correções da forma como falaram e mesmo assim estou com problema ele mostra erro na linha em que uso :printf ("%d", &ano_atual); ,mas ele fala que não posso usar assim,olha um print para vocês verem,estou usando uma IDE aqui para compilar para ficar mais fácil.

42508033316833562633.png

Postado

Coloque sem o & do printf() e acrescente:

printf("Digite o ano atual: ");
scanf("%d", &ano_atual);
printf ("\nAno atual: %d\n", ano_atual);

NW

Postado

Ae pessoal obrigado pela ajuda,depois de muito tempo,e muita ajuda consegui fazer ele funcionar,estava mascando um pouco na hora dos comandos no terminal,mas ate que enfim funcionou,obrigado a todos pela ajuda e pela paciência agora é estudando e sofrendo para poder aprender.

13706089783736571407.png

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...