Jump to content

Programa Simples


UnKnowN
 Share

Recommended Posts

Estou a dar os primeiros passos em C, hj lembrei-me disto lol :P

O que é que se encontra mal neste code ?

#include<stdio.h>
main()
{
     int a, char *b;
     a=1;
     b="Olá";
     printf("%s és o %dº jogador", a, b);
     return 0;
{

Obrigado, Fikem Bem ;)

Link to comment
Share on other sites

char *b?!

no maximo char b

isso apenas permite armazenar um caracter

para armezanar um conjunto de caracteres (string) seria:

char b[n];

ex:

int a;

char b[100];

para copiar uma string para b nao podes usar uma simples atribuiçao

mas sim copiares caracter a caracter ou usar a funçao strcpy que faz isso

strcpy(b,"Olá"); e tens que por um #include <string.h>

ou como alternativa quando a declaras char a[]={".."}; algo deste genero

nem o printf esta correcto!

seria algo do genero:

printf("%s és o %dº jogador", b, a);

%s - string

%d ou %i - inteiro

argumentos separados por vírgulas

"O que é que se encontra mal neste code ?"

A pergunta deveria ser o que se encontra bem neste code?!

Link to comment
Share on other sites

char *b?!

no maximo char b

isso apenas permite armazenar um caracter

para armezanar um conjunto de caracteres (string) seria:

char b[n];

ex:

int a;

char b[100];

para copiar uma string para b nao podes usar uma simples atribuiçao

mas sim copiares caracter a caracter ou usar a funçao strcpy que faz isso

strcpy(b,"Olá"); e tens que por um #include <string.h>

ou como alternativa quando a declaras char a[]={".."}; algo deste genero

nem o printf esta correcto!

seria algo do genero:

printf("%s és o %dº jogador", b, a);

%s - string

%d ou %i - inteiro

argumentos separados por vírgulas

"O que é que se encontra mal neste code ?"

A pergunta deveria ser o que se encontra bem neste code?!

Obrigado pela explicação como disse comecei hj de manha ...

acho que so falta dizer que no fim abres chavetas, mas isso ta mal. tens de as fechar :)

ya isso foi 1 erro Lamme :|

Link to comment
Share on other sites

Como nao percebi uma data de coisas que o entering disse tentei por mim, com o que sei, fazer o projecto... ao compilar (usando Dev-C++) nao deu erro mas ao tentar executar dá erro, um daqueles erros chatos a perguntar se eu quero enviar ou não relatório... o code é este :

#include <string.h>
#include <stdio.h>
main()
{
     int a=1;
     char* b="Ola";
     printf("%s es o %dº jogador", a, b);
     return 0;
}
Link to comment
Share on other sites

char b[4];

strcpy (b,"ola");

substitui isto pelo que tens em char* b="Ola";

Pk [4] e nao [3] ?

ola só tem 3 palvaras... :\

E o que é o strcpy ?

Link to comment
Share on other sites

a funçao strcpy permite copiar uma string para outra

char *strcpy (char *arg1, char *arg2)

Copia a string arg2 para a arg1

Esta definida na biblioteca string.h

Quanto ao facto de ser 4 e não 3 é porque em C uma string termina sempre em \0

Por exemplo a funçao strcpy seria algo deste genero:

char *strcpy (char *arg1, char *arg2) {
 int cont;
 for (cont=0; arg2[cont]!='\0';++cont)
   arg1[cont]=arg2[cont];
   arg1[cont]='\0';
   return arg1;
}

Como ves é necessario uma posiçao para o \0

Ou seja sempre que pensas numa string tem que ter mais uma posiçao para o \0

-----------

Tu nao tens noçoes nenhumas do que é uma string foi deixar aqui uma definiçao geral:

Em c as strings não são um tipo de dados básico, logo a única forma de representar strings é usando um conjuntos de caracteres isto é um vector (de caracteres).

----------

Quanto ao que tu queres fazer nao precisas de usar o strcpy, mas tens erros no code

$ gcc -Wall teste2.c

teste2.c:4: warning: return type defaults to `int'

teste2.c: In function `main':

teste2.c:7: warning: format argument is not a pointer (arg 2)

teste2.c:7: warning: int format, pointer arg (arg 3)

Para já estas a devolver um valor com o return no entanto antes do main nao tens o int!

Não estas a usar nenhuma funçao de strings logo nao precisas da biblioteca string.h

E tens o printf errado!

printf("%s es o %dº jogador", a, b);

a variavel a é um inteiro logo %d ou %i e nao %s de string

code correcto:

#include <stdio.h>
int main(void)
{
     int a=1;
     char* b="Ola";
     printf("%s es o %dº jogador", b, a);
     return 0;
}
Link to comment
Share on other sites

Muito Obrigado pela explicação :)

Tu nao tens noçoes nenhumas do que é uma string foi deixar aqui uma definiçao geral:

Em c as strings não são um tipo de dados básico, logo a única forma de representar strings é usando um conjuntos de caracteres isto é um vector (de caracteres).

1º Erraste, pk sim eu tenho noçoes do que são strings

2º Faz sentido o que escreveste aí :)

code correcto:

#include <stdio.h>

int main(void)

{

      int a=1;

      char* b="Ola";

      printf("%s es o %dº jogador", b, a);

      return 0;

}

Podes tu ou alguém explicar-me o que é o void ? E depois, então o que é o char* b, se é string pkek disseste que tinha de declarar um vector de caracteres ?

Obrigado []

Link to comment
Share on other sites

Ao contrário de Pascal, onde tens um tipo de dados String predefinido,

var nome:string

em C tens de criar o tal vector de caracteres para escreveres texto.

char nome[10]

Este vector escreve um caracter em cada elemento e tem 10 elementos, ou seja, podes escrever 10 caracteres.

O void (se o Inglês não me falha) significa vácuo,vazio. Neste caso, significa que a função não tem parâmetros (penso que é assim).

Espero ter ajudado.

Cumps,

Link to comment
Share on other sites

Ao contrário de Pascal, onde tens um tipo de dados String predefinido,

var nome:string

em C tens de criar o tal vector de caracteres para escreveres texto.

char nome[10]

Este vector escreve um caracter em cada elemento e tem 10 elementos, ou seja, podes escrever 10 caracteres.

O void (se o Inglês não me falha) significa vácuo,vazio. Neste caso, significa que a função não tem parâmetros (penso que é assim).

Espero ter ajudado.

Cumps,

Mas o que quero então saber é pkek o entering usou a "função" char*

Link to comment
Share on other sites

saramgsilva

Estou a dar os primeiros passos em C, hj lembrei-me disto lol :P

O que é que se encontra mal neste code ?

#include<stdio.h>
main()
{
  int a, char *b;
  a=1;
  b="Ola";
  printf("%s és o %dº jogador", a, b);
  return 0;
}

Obrigado, Fikem Bem ;)

bem andei a ler o que escreveram e que confusão aqui não vai... mas ja vi que o autor ja percebeu...mas vou deixar aqui o que achei ( +- ) disto...

tens erro aqui:


main()
{	(...)
return 0;
 }

como fazes return 0; deve ter int main , ou seja devias ter


int main()
{	(...)
return 0;
 }

depois outro erro

	  int a, 

mas sim

	  int a;  

outro erro:



  printf("%s es o %d jogador", a , b);

deves ter :



  printf("%s es o %d jogador",  b, a);

primeiro les a string, b aponta para o inicio de uma string ( notar que char* b; quer dizer que b é um ponteiro do tipo char e fazer char a[3]; a[0]='o', a[1]='l' , a [2]='a' é o mesmo que ter b=&a[0] ou ainda b=a .... b aponta para o endereço de memoria do 1 caracter da string e como 1 string tem as endereços de memorias seguido e termina com '\0'' o programa sabe quando temina a string apontada por b )

e segundo vai ler o digito.... atenção que não deves usar acentos, ª , º, .... porque depois aparecem caracteres estranhos..

o programa final sera:

#include<stdio.h>
int main()
{
  int a;
   char *b;
  a=1;
  b="Ola";
  printf("%s es o %d jogador\n", b,a);

  return 0;
}
Link to comment
Share on other sites

disse isso tudo, e não é uma questão de confusão

esta lá tudo para quem quiser ler

claro que nao faço a 'papinha' toda

desta vez até fiz bastante

citação

code correcto:

#include <stdio.h>

int main(void)

{

      int a=1;

      char* b="Ola";

      printf("%s es o %dº jogador", b, a);

      return 0;

}

resulta!

quanto ao teu code tofas:

alem do mais usar o system("PAUSE"); é uma estupidez

para nao falar que falta o stdlib.h que suporta a funçao system

se tivesses num concurso de programaçao o code ja nao passava

pois com a flag -Wall do gcc emite um warning

Link to comment
Share on other sites

saramgsilva

quanto ao teu code tofas:

alem do mais usar o system("PAUSE"); é uma estupidez

para nao falar que falta o stdlib.h que suporta a funçao system

se tivesses num concurso de programaçao o code ja nao passava

pois com a flag -Wall do gcc emite um warning

nao era para colocar isso.... esqueci-me  :dontgetit: ja modifiquei...  :P

Link to comment
Share on other sites

Obrigado, o C foi mais para ver como era.., e nao consegui ver bem como era ... inda estava numa fase de escolhas e acabei por optar pelo Python 👍

É facil e de simples uso

para terem 1 noçao da facilidade deixo aki 1 code com o objectivo de impressão de nºs pares de 1 a 100 o code é este:

>>> for i in range(1,101):
if i % 2 == 0:
	print i
Link to comment
Share on other sites

Em que é que isso é mais fácil que

for (i=1; i<101; ++i)

if (i%2==0) printf("%d", i);

Isto pra não falar em c++, onde não é preciso formatação esquisita.

Conhecendo minimamente a linguagem, tudo se faz. Onde é preciso velocidade, o python morre.

Desaparecido.

Link to comment
Share on other sites

Em que é que isso é mais fácil que

for (i=1; i<101; ++i)

if (i%2==0) printf("%d", i);

Isto pra não falar em c++, onde não é preciso formatação esquisita.

Conhecendo minimamente a linguagem, tudo se faz. Onde é preciso velocidade, o python morre.

Morre ? Porquê ?

Link to comment
Share on other sites

estava mesmo para dizer o mesmo que tu.... mas força!!  ;)

Estou farto de ver toda a gente a curvar-se sob a superioridade do python. Está na altura de lhe fazer frente nos campos onde o c/c++ é forte! :P Ou seja: dimensão de código, velocidade, e ausência de interpretador. Pode ser um pouco mais complicado escrever um certo e muito específico tipo de algoritmos, mas a que custo?

Morre ? Porquê ?

Porque python é uma linguagem interpretada e c/c++ é compilada. Nunca uma linguagem interpretada pode ter aspirações a ser tão rápida como uma linguagem compilada.

Isto está a ficar off-topic, mas ainda assim... tentei aprender um mínimo de python para fazer um teste de velocidades entre python e c/c++, mas não consegui. Também não me esforcei muito... :😄

Desaparecido.

Link to comment
Share on other sites

Morre ? Porquê ?

Porque python é uma linguagem interpretada e c/c++ é compilada. Nunca uma linguagem interpretada pode ter aspirações a ser tão rápida como uma linguagem compilada.

Isto está a ficar off-topic, mas ainda assim... tentei aprender um mínimo de python para fazer um teste de velocidades entre python e c/c++, mas não consegui. Também não me esforcei muito... ::P

Ok Obrigado por me escalreceres ... inda tá para vir o teste ;)

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
 Share

×
×
  • 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.