0

我的尺寸有验证功能,我无法正确编码

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

我对用户的期望是输入正整数。任何人都可以解决这个问题或为此提供更好的解决方案吗?谢谢。

4

2 回答 2

0

您的版本可能接受浮点数,因为点之前的部分是有效整数。相反,您可以使用 strtol 并检查数字的结尾是否确实是换行符:

#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;
}
于 2014-04-13T17:59:19.047 回答
0

我看不到将接收大小作为 getsize 的参数的任何用途,因为您只需要“cap”本身可以提供的限制。其次,要向 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;
}
}
}
于 2014-04-13T18:04:03.487 回答