Fórum Ubuntu Linux - PT

Suporte Técnico => Programação e Scripts => Tópico iniciado por: usifoto em 22 de Julho de 2007, 10:10

Título: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 22 de Julho de 2007, 10:10
 :(

Olá, pessoal

Comecei a estudar seguindo uma apostila do site http://www.apostilando.com e, ao visitar um link http://www.ppgia.pucpr.br/~maziero/ensino/so/projetos/curso-c/aulas-main.html postado pelo colega tfmoraes, vi que se tratava da mesma apostila que eu havia baixado em formato .doc, porém, no primeiro exemplo de programa, embora o exemplo fosse o mesmo, apresentava essa diferença:

Na apostila:
Código: [Selecionar]
#include <stdio.h>
        /* Um Primeiro Programa */
        int main ()   
        {
            printf ("Ola! Eu estou vivo!\n");
            return(0);
        }

No curso on-line:
Código: [Selecionar]
#include <stdio.h>
        void main ()    /* Um Primeiro Programa */
        {
            printf ("Ola! Eu estou vivo!\n");
        }

Perguntas:

1 - Qual a diferença entre int e void?

2 - Como faço para compilar o programa no Kubuntu, depois de digita-lo no kate?

Obrigado.

Ronie
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: celsofaf em 22 de Julho de 2007, 14:20
1 - Qual a diferença entre int e void?

Grosso modo:

int = a função main() retorna um valor inteiro.
void = main() não retorna valor.

Na prática, para a função main() (que é a função principal de qualquer programa), não há muita diferença. Mas, para main(), prefira sempre usar int, com return(0) ao final. Logo você saberá a razão.

2 - Como faço para compilar o programa no Kubuntu, depois de digita-lo no kate?

Código: [Selecionar]
gcc -o nomedoexecutável codigofonte.c
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: Darcamo em 22 de Julho de 2007, 14:31
Por enquanto que são poucos arquivos para compilar você pode continuar usando o gcc diretamente pela linha de comando como o celsofaf ensinou.

No entanto, quando seu programa começar a ficar maior e composto por vários arquivos você provavelmente deva preferir usar o make para compilar. Nesse tópico http://ubuntuforum-pt.org/index.php/topic,21155.0.html (http://ubuntuforum-pt.org/index.php/topic,21155.0.html) eu postei um tutorial básico sobre o make e como criar seu proprio makefile. O Exemplo lá é para C++ mas é fácil adaptar para C (ou para diversas outras coisas).
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: tfmoraes em 22 de Julho de 2007, 16:25
Citar
1 - Qual a diferença entre int e void?

http://www.delorie.com/djgpp/v2faq/faq22_25.html
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 22 de Julho de 2007, 16:28
Obrigado pelas respostas.

Então, supondo que eu vou usar o nome "exemplo1" eu devo digitar o código no kate, salvar em qualquer diretório como "exemplo1.c" e, depois, pelo terminal, gcc -o exemplo1 exemplo1.c?

Vou tentar assim.  ;)

Deu erro  :(

Código: [Selecionar]
ubuntu@ubuntu:~/Desktop$ gcc -o exemplo1 exemplo1.c
exemplo1.c:1:20: error: stdio.h: Arquivo ou diretório inexistente
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c: In function ‘main’:
exemplo1.c:5: warning: incompatible implicit declaration of built-in function ‘printf’
exemplo1.c:8:2: warning: no newline at end of file
ubuntu@ubuntu:~/Desktop$

Na apostila não há nada sobre como tratar o código digitado e compilar e eu não sei como funciona...

Grato

Ronie
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 22 de Julho de 2007, 20:53
 :'(

Se alguém estiver a fim de me dar umas dicas via MSN, por favor me adicione:

usifoto(arroba)ig(ponto)com(ponto)br
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: Dimas em 22 de Julho de 2007, 21:02
Você instalou o build-essential ?
Em negação, instale-o assim:
Código: [Selecionar]
sudo aptitude install build-essential
Poste o seu código, isto também ajuda.

Valeu!
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 22 de Julho de 2007, 22:11
Olá, Dimas.

O código que estou querendo compilar é o primeiro exemplo da apostila:
Código: [Selecionar]
#include <stdio.h>
/* Um Primeiro Programa */
int main ()
{
printf ("Ola! Eu estou vivo!\n");
return(0);
}

Eu estou salvando da forma correta?

Eu digitei o código acima no Kate e salvei com a extensão ".c" no Desktop mesmo. Pode ser dessa forma ou é exigido algum modo ou diretório especial para salvar o código a ser compilado?

Após instalar o build-essential deu o seguinte erro:
Código: [Selecionar]
ubuntu@ubuntu:~$ cd ~/Desktop
ubuntu@ubuntu:~/Desktop$ gcc -o exemplo1 exemplo1.c
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c:3: error: stray ‘\302’ in program
exemplo1.c:3: error: stray ‘\240’ in program
exemplo1.c:8:2: warning: no newline at end of file
ubuntu@ubuntu:~/Desktop$

Grato

Ronie
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 22 de Julho de 2007, 22:40
 ;D

Eureka!

Consegui!

Deu alerta, mas funcionou:
Código: [Selecionar]
ubuntu@ubuntu:~/Desktop$ gcc -o exemplo1 exemplo1.c
exemplo1.c:8:2: warning: no newline at end of file
ubuntu@ubuntu:~/Desktop$ ./exemplo1
Ola! Eu estou vivo!
ubuntu@ubuntu:~/Desktop$

O que seria essa "nova linha no final do arquivo" que provocou esse alerta?
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: celsofaf em 22 de Julho de 2007, 23:52
Sempre deixe uma linha vazia ao final do fonte. Suponho que seja isso. :)
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: Darcamo em 23 de Julho de 2007, 23:50
É isso mesmo. Sempre deixa uma linha em branco no final do arquivo para evitar esse warning.

Quanto aos erros que você estava tendo antes, o que era?
O código está certo então fiquei pensando se era o sistema de codificação de caracteres do arquivo que o kate gravou (ou seja, se num era culpa do editor).
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 24 de Julho de 2007, 09:26
 ???

Eu não sei o que estava acontecendo, mas de uma hora para outra ficou normal e agora está compilando corretamente.

Tá indo tudo bem agora, estou conseguindo entender os exemplos, digito os códigos e compilo para exercitar.

Antes de passar o código no editor eu dou uma lida para entender o que ele vai fazer e depois tento digitar tudo de cabeça, para ver se consigo montar o código sem erros. Até agora tá dando pra acompanhar a apostila.

Obrigado pela força
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 03 de Agosto de 2007, 20:24
Olá, pessoal.

Cá estou, a passos de tartaruga, mas vou indo.  ;D

Cheguei na quarta auto-avaliação da apostila e resolvi os exercícios propostos, mas quando decidi criar um outro programinha baseado no que vi até aqui, me deparei com o seguinte erro:

Código: [Selecionar]
senha.c:9: error: incompatible types in assignment
Está dando erro quando eu tento clonar o conteúdo da senha original.

O código do exercício é este:
Código: [Selecionar]
#include<stdio.h>
int main()
{
char senhao[11],senham[11];
int x;
printf("\nDigite uma senha em maiusculas");
printf("\nuse no maximo dez caracteres: ");
gets(senhao);
senham=senhao;
for(x=0;senham[x]!='\0';x=x+1)
{
if(senham[x]=='O')
{
senham[x]='0';
}
if(senham[x]=='I')
{
senham[x]='1';
}
if(senham[x]=='Z')
{
senham[x]='2';
}
if(senham[x]=='E')
{
senham[x]='3';
}
if(senham[x]=='A')
{
senham[x]='4';
}
if(senham[x]=='S')
{
senham[x]='5';
}
if(senham[x]=='G')
{
senham[x]='6';
}
if(senham[x]=='T')
{
senham[x]='7';
}
if(senham[x]=='B')
{
senham[x]='8';
}
}
printf("\n\nSenha original: %s",senhao);
printf("\nSenha modificada: %s\n\n",senham);
return(0);
}

Outra coisa que me chamou a atenção é que se eu comentar a linha 9 o programa funciona, mesmo estando a variável da senha modificada (e não aquela captada pelo gets) no loop. Alguém me explica o que acontece?  ???

E esse alerta?
Código: [Selecionar]
auto_avaliacao_004-b.c:(.text+0x32): warning: the `gets' function is dangerous and should not be used.
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: tfmoraes em 03 de Agosto de 2007, 21:35
Cara, você não pode atribuir uma matriz deste jeito, você teria que atribuir valor por valor.
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 03 de Agosto de 2007, 21:44
Tô revirando a apostila pra ver se acho algo que explique como fazer.

Na seqüência que acompanhei até aqui não tem nada que ensine, então vou ter de aprender batendo a cabeça mesmo.

Obrigado.

[]'s
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: _Luks em 04 de Agosto de 2007, 00:42
Código: [Selecionar]
//atribuindo valores de matrizes ...
void main(void)
{
int i,m[50];
char str[50];

for ( i = 0 ; i <= 50 ; i++ )  m[i] = str[i];
}
Título: Re: C - Primeiras dúvidas de um iniciante
Enviado por: usifoto em 05 de Agosto de 2007, 09:52
Já achei na apostila a explicação de como fazer.

Está mais adiante, na aula 5, e eu ainda estou lendo a aula 3.

Melhor não "inventar moda" e ir fazendo só os exercícios da apostila até o fim.  ;D