paulo1205
(usa Ubuntu)
Enviado em 22/10/2014 - 03:35h
Por favor, edite sua postagem original e coloque a transcrição do código do programa entre as
tags “
[co de] ” e “
[/co de] ”. Vai facilitar a leitura e evitar confusões de formatação, uma vez que o fórum usa “[i
]” como marcador de texto em caracteres itálicos.
Para o seu programa, não será necessário usar <math.h>.
Um dos erros do programa está na linha com o
for . Você deve lembrar que o laço com
for executa _enquanto_ a condição de controle for verdadeira. Como você inicializou
i com o valor oito, sua comparação
i==0 vai ser falsa logo de cara, e programa não vai entrar no laço de repetição nem mesmo uma vez.
Não entendi o papel de
vetor . Você parece nunca escrever nele, mas exibe-o como resultado do programa. Ou você se equivocou na transcrição, ou fez mesmo alguma coisa errada, que tem de rever.
Parece, ainda, que falta algum pedaço do código. Você deveria fazer algum deslocamento, ou levando o valor de
n até zero, ou comparando o valor lido com potências diferentes da base 2. Nem uma coisa nem outra estão presentes no seu código.
Você está com a impressão do resultado da conversão dentro do laço que a realiza. Acho, até pela mensagem que precede a exibição do valor, que você não está interessado em resultados parciais. Assim, a impressão deveria estar após o término do laço.
A função
main () deve retornar um valor inteiro. Você não esqueceu do
return 0; , o que é bom, mas deixou de explicitar o tipo de retorno na definição da função, o que é uma prática obsoleta, segundo o padrão do C de 1989 (as versões do padrão de 1999 e 2011 reforçam essa obsolescência, podendo até recusar seu código).
Mais ainda sobre
main (): o padrão determina que, numa implementação
self-hosting (que é o caso dos nossos PCs), você deve declará-la explicitamente sem receber argumento algum, ou recebendo exatamente dois argumentos, sendo um inteiro e um ponteiro de ponteiro de caracteres (ver abaixo). Do jeito como você fez, sem colocar qualquer especificação de parâmetros entre parênteses, a função poderia receber qualquer quantidade de quaisquer tipos de argumentos, abrindo espaço para (ab)usos que violam o padrão.
/*
Quando main() não recebe argumentos do ambiente de execução
(ou você não tem interesse em tratá-los).
*/
int main(void)
/*
Quando main() recebe do ambiente de execução uma lista de
argumentos, que são apresentados à função como strings de
texto.
A quantidade de argumentos é colocada no parâmetro inteiro
'argc', e 'argv' se comporta como um vetor de strings com
argc+1 elementos. Por convenção, o nome usado para invocar
o programa é considerado um argumento e é colocado em
'argv[0]'. Os demais argumentos, que vão de 'argv[1]' até
'argv[argc-1]', são os aqueles que o programa deve processar.
Por fim, 'argv[argc]' é um ponteiro nulo, e serve como mar-
cador do final da lista de argumentos.
*/
int main(int argc, char **argv)