paulo1205
(usa Ubuntu)
Enviado em 10/11/2014 - 15:11h
renanpk escreveu:
não me ajudou muito não, pq por exemplo eu fiz o seguinte programa porem não consigo imprimir nada:
Ninguém tem obrigação de adivinhar o tipo de ajuda de que você precisa, ainda mais pelo fato de que você não tinha dito o que já tinha feito. Você fez uma pergunta genérica, não deveria reclamar de uma resposta genérica.
Como agora você mostrou o código, dá para falar bem mais.
Você não precisa de <math.h> nesse programa.
É errôneo declarar
main() como “
int main()”. Em C, uma lista de parâmetros vazia significa que a função aceita receber qualquer quantidade de argumentos de quaisquer tipos. O padrão do C para ambientes auto-hospedados diz que você deve declarar
main() ou como “
int main(void)” (i.e. não receber argumento nenhum) ou por “
int main(int argc, char **argv)” (o primeiro argumento é um contador de elementos no segundo argumento, e o segundo argumento é uma lista de ponteiros de caracteres, que representam uma lista de argumentos strings).
Quando você declara
vetor, cria um
array com zero elementos. Tenho quase certeza de que não é isso que você quer, especialmente tendo em vista que vai ler um string com
scanf() algumas linhas abaixo.
Nos demais
arrays, ao limitar o tamanho dos
strings em 4, está deixando de reservar espaço para byte nulo nos numerais correspondentes 8, 80 e 800. Ou você passa esse valor para 5 ou, para simplificar sua vida, declara seus
arrays, por exemplo, do seguinte modo.
const char *const u[]={
"", /* 0 */
"I", /* 1 */
"II", /* 2 */
"III", /* 3 */
"IV", /* 4 */
"V", /* 5 */
"VI", /* 6 */
"VII", /* 7 */
"VIII", /* 8 */
"IX" /* 9 */
};
Repita a fórmula para as dezenas, centenas e milhares, inclusive com os elementos zero. (Eu sei que não existe zero em numerais romanos, mas aquele string vazio vai facilitar sua vida. Acredite.)
Quando eu disse para fazer exatamente o que você faria manualmente, não imaginei que você fosse criar vários fluxos diferentes dependendo do tamanho do número. Certamente dá para usar um laço de repetição para testar cada dígito do numeral indo-arábico lido (eu teria lido um número, pois facilita testar se o número lido está dentro da faixa aceitável), diminuindo bastante o comprimento do código. Se você for esperto, dá para rearrumar seus
arrays de correspondência entre valor relativo e numeral romano e usar, dentro do laço, um ponteiro que saiba passar de milhar para centena, dezena e unidade também nesses
arrays de correspondência rearrumados (dica: pense num
array bidimensional).