pedrohpcm 0 Denunciar post Postado Junho 20, 2015 Alguém poderia me ajudar com essa questão? Escreva um programa que escreva em um arquivo os divisores de um número inteiro passado como parâmetro do programa. O programa deve receber dois parâmetros, o número inteiro e o nome do arquivo a ser gravado. Um exemplo de chamada de programa é: ./divisores 213 divisores213.txt Para implementar este programa uso os códigos fornecidos a seguir: main.c #include <stdio.h> #include "divisores.h" void usage(){ printf("\n\n Uso do programa gera_divisores:\n\n"); printf(" ./gera_divisores NUM ARQ\n\n"); printf(" onde NUM é um inteiro com o número cujo divisores se deseja gerar\n"); printf(" e ARQ é o nome do arquivo a ser criado com os divisores de NUM."); printf("TODOS os parâmetros são obrigatórios"); } int check_parameters(int argc, char **argv){ /* FALTA IMPLEMENTAR */ return 0; } unsigned long int converte(char *num){ unsigned long int n; /* FALTA IMPLEMENTAR */ return n; } int main(int argc, char * argv[ ]) { FILE * arq_divisores; if (!check_parameters(argc, argv)){ usage(); return 1; } arq_divisores = fopen(argv[2],"w"); if (arq_divisores== NULL){ printf("ERROR: Não foi possível abrir o arquivo %s.\n",argv[2]); return 2; } if (gera_divisores(converte(argv[1]),arq_divisores) != 0){ printf("ERROR: Problemas ao escrever dados no arquivo %s.\n", argv[2]); return 3; } fclose(arq_divisores); return 0; } divisores.h #ifndef Divisores_divisores_h #define Divisores_divisores_h int gera_divisores(unsigned long int num, FILE * arquivo); #endif divisores.c #include <stdio.h> #include "divisores.h" int gera_divisores(unsigned long int num, FILE * arquivo){ return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 21, 2015 É necessário realmente implementar verificação dos argumentos? Se você estiver usando algum sistema que suporte o padrão POSIX e seu programa for executado somente nesse ambiente pode usar optarg (unistd.h) para facilitar a coisa. Ao invés de ficar criando mensagens você mesmo, use error.h. #include <stdio.h> #include <errno.h> #include <string.h> int main(int argc, char * argv[ ]) { // TRATAMENTO DOS ARGUMENTOS FILE * arq_divisores = fopen(argv[2],"w"); if (!arq_divisores || ferror(arq_divisores)) { printf("[ERRO @ %d]: %s\n", __LINE__-2, strerror(errno)); exit(errno); } // RESTANTE DAS CHAMADAS. fclose(arq_divisores); return 0; } Qual é o problema com a questão?(Leia as regras que estão nos tópicos fixos desse fórum. Pessoas pedindo código pronto tem seus tópicos excluídos.) Compartilhar este post Link para o post Compartilhar em outros sites