在整数上使用scanf

时间:2014-03-31 18:46:31

标签: c scanf getchar

我的任务是创建数组,为了做到这一点,我需要输入大小,但我必须确保输入不是负数,字母或符号。我创建了这样做的功能,但我的if不能正常工作。如果我输入负数或字符,它仍然使用它。

这是我使用的功能:

void getsize(int* size){
    printf("Enter the size of array\n");
  if ((scanf("%d", size) == 1) && (getchar() == '\n') && (size > 0)){
     printf("Size: %d entered\n", *size);
  } else {
   printf("wrong input\n");
   while(getchar() != '\n');
  }
}

getsize(&size);

4 个答案:

答案 0 :(得分:3)

主要问题是,你将值的地址与0进行比较。size是一个指针,所以使用:

 (*size > 0)

而不是

 (size > 0)

答案 1 :(得分:2)

您正在将指针与0进行比较,而不是您在其指向的内存位置中存储的值。在if内,请使用以下内容作为最终比较:

... (*size > 0)) { ... }

答案 2 :(得分:1)

你的if语句中的

。你正在检查size > 0 这应该是*size > 0

答案 3 :(得分:0)

void getsize(int* size){
    printf("Enter the size of array\n");
    if ((scanf_s("%d", size) == 1) && (getchar() == '\n') && (*size > 0)){
        printf("Size: %d entered\n", *size);
    }
    else {
        printf("wrong input\n");
        while (getchar() != '\n');
    }
}

这对我有用。只需将尺寸> 0更改为*尺寸> 0,因为您必须检查值,而不是地址。