C - Primeiras dúvidas de um iniciante

Iniciado por usifoto, 22 de Julho de 2007, 10:10

tópico anterior - próximo tópico

usifoto

 :(

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:

#include <stdio.h>
        /* Um Primeiro Programa */
        int main ()   
        {
            printf ("Ola! Eu estou vivo!\n");
            return(0);
        }


No curso on-line:

#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

celsofaf

Citação de: usifoto online 22 de Julho de 2007, 10:10
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.

Citação de: usifoto online 22 de Julho de 2007, 10:10
2 - Como faço para compilar o programa no Kubuntu, depois de digita-lo no kate?

gcc -o nomedoexecutável codigofonte.c
Rio de Janeiro, RJ, Brasil

Darcamo

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 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).

tfmoraes


usifoto

#4
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  :(

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

usifoto

 :'(

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

usifoto(arroba)ig(ponto)com(ponto)br

Dimas

Você instalou o build-essential ?
Em negação, instale-o assim:
sudo aptitude install build-essential

Poste o seu código, isto também ajuda.

Valeu!
Dimas Gabriel
digabriel[at]gmail.com

"Liberdade é a questão, a única e exclusiva questão."

usifoto

#7
Olá, Dimas.

O código que estou querendo compilar é o primeiro exemplo da apostila:

#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:

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

usifoto

#8
 ;D

Eureka!

Consegui!

Deu alerta, mas funcionou:

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?

celsofaf

Sempre deixe uma linha vazia ao final do fonte. Suponho que seja isso. :)
Rio de Janeiro, RJ, Brasil

Darcamo

É 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).

usifoto

 ???

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

usifoto

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:

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:

#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?
auto_avaliacao_004-b.c:(.text+0x32): warning: the `gets' function is dangerous and should not be used.

tfmoraes

Cara, você não pode atribuir uma matriz deste jeito, você teria que atribuir valor por valor.

usifoto

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