【问题标题】:getting values for an array using scanf function in C使用C中的scanf函数获取数组的值
【发布时间】:2017-12-01 00:41:09
【问题描述】:

我有一个函数定义,它通过用户使用 scanf 获取数组的值。这就是我所拥有的

void readInArray(int *arr, int size) {
    int i;
    printf("Enter your list of numbers: ");
    for (i = 0; i < size; i++) {
        scanf("%f", arr[i]);
        printf("%d\n", arr[i]);
    }
}

当我尝试打印数组时,我在 scanf 行出现错误,提示“格式指定类型 'float *' 但参数的类型为 'int'”。我尝试将 %f 更改为 %d,以便 scanf和 printf 具有相同的占位符

void readInArray(int *arr, int size) {
    int i;
    printf("Enter your list of numbers: ");
    for (i = 0; i < size; i++) {
        scanf("%d", arr[i]);
        printf("%d\n", arr[i]);
    }
}

但我仍然遇到同样的错误。我该如何解决这个问题?

【问题讨论】:

  • 谢谢它的工作
  • @JDK 不是每个scanf 教程都展示了如何正确执行此操作吗?
  • 如果你按照你说的那样做,你不可能得到同样的错误。
  • BDW 你用的是哪个编译器?您是否正确输入了所有元素?

标签: c arrays scanf


【解决方案1】:

看来您需要在 arr[i] 之前添加 &:

scanf("%d", &arr[i]);

【讨论】:

  • 数组不需要。
【解决方案2】:

函数scanf() 将来自stdin 的输入放置到您告诉它的任何位置。您在scanf() 中提供的第二个参数不是指向用户输入应该去哪里的指针——arr[i] 是一个整数。格式化后的第二个参数需要是指针。

因此,您需要以下内容:

scanf("%d", (arr+i));

scanf("%d", &arr[i]);

对于第一种情况,将数组作为参数传递与传递指向该数组所保存的连续内存块中的第一个元素的指针相同。以整数递增将带您到下一个元素。

第二种情况是首先提供数组中第 i 个元素的值,arr[i],然后与号给出该元素在内存中的地址——所以是一个指针。

【讨论】:

    【解决方案3】:

    如下写代码,就可以了

    int i, *marks;
    
    for(i=0;i<5;i++){
        printf("\nenter marks[%d] : ",i);
        scanf("%d",&marks[i]);
        printf("\nenter marks[%d] finished : ",i);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2012-02-24
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2015-11-10
      • 2015-07-24
      相关资源
      最近更新 更多