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.

¿Fue útil?

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
scroll top