Asile
2004-08-19 00:46:30 UTC
Hola, dos cuestiones sobre este programita:
1. Me gustaría combinar estos dos if en uno sólo con un ||
para no tener que repetir la función error(). No veo la manera
puesto no puedo comprobar n si arg!=2, y si argc==1 strtod da
segmentation fault logicamente.
Vamos, es como el perro que se come su rabo...
if (argc!=2) error(program_name);
n=strtod(argv[1],ptr);
/* Chequeo de error de la línea de comandos */
if (n=='\0') error(program_name);
2. ¿Qué tal veis el programa, está correcto? ¿estilo, mejoras, etc?
¿Hago bien con usar strtod?
/*
* Hacer un programa que calcule y muestre por pantalla los N números
* primos introducidos en la línea de comandos.
* El parámetro N será obligatorio, y en caso de no introducirlo
* se mostrará un error con la ayuda pertinente.
*
* primos.c
* 21 de Agosto de 2004.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
int error(char *program_name);
int main (int argc, char **argv){
char *program_name;
char *ptr[256];
double n; /* veces */
int i;
int resto=0;
int cociente;
int es_primo=FALSE;
program_name=argv[0];
/* Chequeo de error de la línea de comandos */
if (argc!=2) error(program_name);
n=strtod(argv[1],ptr);
/* Si n no es un número */
if (n=='\0') error(program_name);
for (i=n;i>=1;i--){
es_primo=TRUE;
/* si solo es divisible por si mismo y la unidad es primo */
for (cociente=n;cociente>=1;cociente--)
{
if (i!=cociente && cociente!=1)
{
resto=i%cociente;
/* Si el resto es cero ya no es primo */
if (resto==0) es_primo=FALSE;
}
}
if (es_primo==TRUE) printf ("%.0f Es primo\n",n);
n--;
}
return (0);
}
/* Mensaje de error */
int error(char *program_name){
fprintf (stderr,"Error:\nUso: %s <veces>\n",program_name);
fprintf (stderr,"Donde <veces> ha de ser un número distinto de cero\n");
exit (1);
}
1. Me gustaría combinar estos dos if en uno sólo con un ||
para no tener que repetir la función error(). No veo la manera
puesto no puedo comprobar n si arg!=2, y si argc==1 strtod da
segmentation fault logicamente.
Vamos, es como el perro que se come su rabo...
if (argc!=2) error(program_name);
n=strtod(argv[1],ptr);
/* Chequeo de error de la línea de comandos */
if (n=='\0') error(program_name);
2. ¿Qué tal veis el programa, está correcto? ¿estilo, mejoras, etc?
¿Hago bien con usar strtod?
/*
* Hacer un programa que calcule y muestre por pantalla los N números
* primos introducidos en la línea de comandos.
* El parámetro N será obligatorio, y en caso de no introducirlo
* se mostrará un error con la ayuda pertinente.
*
* primos.c
* 21 de Agosto de 2004.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
int error(char *program_name);
int main (int argc, char **argv){
char *program_name;
char *ptr[256];
double n; /* veces */
int i;
int resto=0;
int cociente;
int es_primo=FALSE;
program_name=argv[0];
/* Chequeo de error de la línea de comandos */
if (argc!=2) error(program_name);
n=strtod(argv[1],ptr);
/* Si n no es un número */
if (n=='\0') error(program_name);
for (i=n;i>=1;i--){
es_primo=TRUE;
/* si solo es divisible por si mismo y la unidad es primo */
for (cociente=n;cociente>=1;cociente--)
{
if (i!=cociente && cociente!=1)
{
resto=i%cociente;
/* Si el resto es cero ya no es primo */
if (resto==0) es_primo=FALSE;
}
}
if (es_primo==TRUE) printf ("%.0f Es primo\n",n);
n--;
}
return (0);
}
/* Mensaje de error */
int error(char *program_name){
fprintf (stderr,"Error:\nUso: %s <veces>\n",program_name);
fprintf (stderr,"Donde <veces> ha de ser un número distinto de cero\n");
exit (1);
}