C/Visual C - Problema simple de numeros negativos

   
Vista:

Problema simple de numeros negativos

Publicado por carlos (63 intervenciones) el 16/01/2018 11:10:42
El problema es simple quiere que no deje poner numeros negativos probe a hacer un simple mayor que 0.El problema es que cuando pongo por ejemplo -32 no me deja pone que es positivo
¿Me equivocado al declarar el tipo de variable o que puede ser alguna otra cosa?Mire en varios foros pero en todos es con else
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <string.h>
struct
{
char nombreFich[41];/* Nombre del fichero */
unsigned long tamanyo;/* El tamaño en bytes */
}fichas[1000];
int numeroFichas=0;/* Nmero de fichas que ya tenemos */
int i;/* Para bucles */
int opcion;/* La opcion del menu que elija el usuario */
char textoTemporal[40];/* Para cuando preguntemos al usuario */
unsigned long numeroTemporal;
int main(){
do
{
/* Menu principal */
printf("Escoja una opción:\n");
printf("1.-Añadir datos de un nuevo fichero\n");
printf("2.-Mostrar los nombres de todos los ficheros\n");
printf("3.-Mostrar ficheros que sean de mas de un cierto tamaño\n");
printf("4.-Ver datos de un fichero\n");
printf("5.-Salir\n");
/* Para evitar problemas con datos mal introducidos,
leemos con "gets" y luego lo filtramos con "
sscanf" */
gets(textoTemporal);
sscanf(textoTemporal,"%d",&opcion);
/* Hacemos una cosa u otra según la opción escogida */
switch(opcion)
{
case 1:
/* Aadir un dato nuevo */
if(numeroFichas<1000)/* Si queda hueco */
{
 
printf("Introduce el nombre del fichero: ");
gets(fichas[numeroFichas].nombreFich);
while(strcmp(fichas[numeroFichas].nombreFich,"\0 ")==0){
 
printf("Introduce el nombre del fichero: ");
gets(fichas[numeroFichas].nombreFich);
}
printf("Introduce el tamaño en KB: ");
gets(textoTemporal);
printf(textoTemporal);
// hacer que cuando pida el numero convertirlo y compararlo ya
//que no puede compararlo por ser string
if(textoTemporal>= "0"){
sscanf(textoTemporal,"%ld",&fichas[numeroFichas].tamanyo);
}
else{
	printf("Te has equivocado se va a vaciar el espacio");
	fichas[numeroFichas].nombreFich=='\0';
	fichas[numeroFichas].tamanyo=='\0';
	break;
}
/* Y ya tenemos una ficha más */
numeroFichas++;
}
else
/* Si no hay hueco para más fichas, av
isamos */
printf("Máximo de fichas alcanzado (1000)!\n");
break;
case 2:
/* Mostrar todos */
for(i=0;i<numeroFichas;i++)
printf("Nombre: %s; Tamaño: %ldKb\n",fichas[i].nombreFich,fichas[i].tamanyo);
break;
case 3:
/* Mostrar según el tamaño */
printf("¿A partir de que tamaño quieres que te muestre?");
gets(textoTemporal);
sscanf(textoTemporal,"%ld",&numeroTemporal);
for(i=0;i<numeroFichas;i++)
if(fichas[i].tamanyo>=numeroTemporal)
printf("Nombre: %s; Tamaño: %ld Kb\n",fichas[i].nombreFich,fichas[i].tamanyo);
break;
case 4:
/* Ver todos los datos (pocos) de un fichero */
printf("¿De qué fichero quieres ver todos los datos?");
gets(textoTemporal);
for(i=0;i<numeroFichas;i++)
if(strcmp(fichas[i].nombreFich,textoTemporal)==0)
printf("Nombre: %s; Tamaño: %ld Kb\n",fichas[i].nombreFich,fichas[i].tamanyo);
break;
case 5:
/* Salir: avisamos de que salimos */
printf("Fin del programa\n");
break;
default:
/* Otra opcion: no válida */
printf("Opción desconocida!\n");
break;
}
}
while(opcion!=5);
/* Si la opcion es 5, terminamos */
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema simple de numeros negativos

Publicado por Tom (561 intervenciones) el 16/01/2018 12:47:38
Describe un poco mejor eso de "que no deje poner numeros negativos".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema simple de numeros negativos

Publicado por agustin (266 intervenciones) el 16/01/2018 13:43:47
Los arrays de caracteres no se comprueban con operadores lógicos. No entiendo porque usas una cadena pero si quieres hacerlo así deberías pasarlo a entero y comprobar su valor o hacerlo a mano la comprobación primero viendo que sean números todos los caracteres y si el primero no lo es compruebas si es el signo negativo. Todo lo que no cumpla esa condición no vale. Podrías crearte una función para comprobarlo aunque ya hay funciones para ello como sscanf.
Algo así por ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <string.h>
 
int IsNum(char *in, int *valor)
{
	int i,largo,retval,neg=0;
	largo=strlen(in);
	for (i=0;i<largo;i++){
		if (in[i]<'0' || in[i]>'9'){
			if (i==0 && in[i]=='-'){
				neg=1;
			}else{
				break;
			}
		}
	}
	if (i==largo){
		if (neg==1){
			retval=-1;
		}else{
			retval=0;
		}
		*valor=atoi(in);
	}else{
		retval=-2;
	}
	return retval;
}
 
int main()
{
	char cadena[25];
	int valor,retval;
	printf("Introduce un numero: ");
	fgets(cadena,sizeof(cadena)-1,stdin);
	cadena[strlen(cadena)-1]='\0';
	retval=IsNum(cadena,&valor);
	switch (retval)
	{
		case -1:
		printf("%i es negativo",valor);
		break;
 
		case -2:
		printf("Formato no valido");
		break;
 
		case 0:
		printf("%i es positivo", valor);
		break;
	}
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema simple de numeros negativos

Publicado por Chema (234 intervenciones) el 16/01/2018 14:31:48
Comprobar el signo de un número es fácil y sencillo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void){
	int s;
	int x;
	x = -8123;
 
	s = +1 | (x >> (sizeof(int) * 8 - 1));
 
	printf("%d\n", s);
 
	s = (x > 0) - (x < 0);
 
	printf("%d\n", s);
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema simple de numeros negativos

Publicado por carlos (63 intervenciones) el 18/01/2018 10:59:00
Lo que quiero es que cuando ponga -32 a la hora de pedir KB si es negativo le avise, eso solo

Intente pasandolo con sscanf pero no funcionanba

Todavia no he leido la parte de crear funciones y la de sizeof no la entiendo de @chema no lo entiendo

Desde la linea 43 a la 56
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad