Question

Il y a la fonction de validation de ma taille que je ne peux pas réussir à la coder correctement

    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;
    }
    }
}

Ce que j'attends de l'utilisateur est de saisir un nombre entier positif.Quelqu'un peut-il résoudre ce problème ou montrer une meilleure solution pour cela?Merci.

Était-ce utile?

La solution

Votre version peut accepter des nombres de flotteurs depuis la pièce avant que le point ne soit un entier valide.Au lieu de cela, vous pouvez utiliser Strtol et vérifier la fin du nombre est en effet une nouvelle ligne:

#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;
}

Autres conseils

Je ne vois aucune utilisation de la taille de la réception en tant que paramètre à grevoir, car vous n'avez besoin que des limites pouvant être fournies par "capuchon" elle-même.secondement, une adresse à une variable doit être fournie à 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;
}
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top