【问题标题】:Using scanf on integer对整数使用 scanf
【发布时间】:2014-03-31 18:46:31
【问题描述】:

我的任务是创建数组,为此我需要输入大小,但我必须确保输入不是负数、字母或符号。我创建了函数来做到这一点,但我的 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);

【问题讨论】:

  • "%d" 无论如何都不会获得非数字字符...

标签: c scanf getchar


【解决方案1】:

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

 (*size > 0)

而不是

 (size > 0)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在你的 if 语句中。你正在检查size > 0 这应该是*size > 0

      【讨论】:

        【解决方案4】:
        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');
            }
        }
        

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

        【讨论】:

          猜你喜欢
          • 2021-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-14
          • 1970-01-01
          相关资源
          最近更新 更多