Necesita ayuda básica en C con
-
21-12-2019 - |
Pregunta
Existe la función de validación para mi tamaño que no puedo conseguir codificarlo correctamente
void getsize(int* size, int cap){
while(1){
printf("Enter the size(whole number) of array from interval (0, %d]: \n", cap);
if (scanf("%d", size) == 1){
if ((*size > 1) && (*size <= cap)){
printf("Size: %d entered\n", *size);
break;
} else {
printf("Invalid size. Try again.\n");
}
} else {
printf("Invalid size. Try again.\n");
break;
}
}
}
Lo que espero del usuario es ingresar un número entero positivo.¿Alguien puede arreglar esto o mostrar mejor solución para esto?Gracias.
Solución
Su versión puede aceptar números de flotador desde la parte antes de que el punto sea un entero válido.En su lugar, puede usar STRTOL y verificar el final del número es de hecho una línea nueva:
#include <stdio.h>
#include <stdlib.h>
void getsize(int* size, int cap){
char buffer[256], *c;
while (1) {
if (fgets(buffer, sizeof(buffer), stdin)) {
int lsize = strtol(buffer, &c, 10);
if ((lsize > 1) && (lsize <= cap) && c[0] == '\n'){
printf("Size: %d %s entered\n", lsize, c);
*size = lsize;
return;
}
}
printf("Invalid size. Try again.\n");
}
}
int main ( ) {
int size;
getsize(&size, 10);
return 0;
}
Otros consejos
No puedo ver ningún uso de la talla de recepción como un parámetro para que geta, ya que solo necesitan los límites que pueden proporcionarse "CAP" en sí mismo. En segundo lugar, se debe proporcionar una dirección a una variable a SCANF.
void getsize(int cap){
int size;
while(1){
printf("Enter the size(whole number) of array from interval (0, %d]: \n", cap);
if (scanf("%d", &size) == 1){
if ((size > 1) && (size <= cap)){
printf("Size: %d entered\n", *size);
break;
} else {
printf("Invalid size. Try again.\n");
}
} else {
printf("Invalid size. Try again.\n");
break;
}
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow