警告:比数据参数更多的'%'转换

时间:2018-11-08 00:10:14

标签: c

我是C语言的新手,我正在尝试编写一个程序作为作业。用户应输入7个浮点数,然后将其存储在数组中。

#include <stdio.h>
#include <string.h>

int main() {
  float data[32];
  printf("Instert 7 values, separated by spaces: ");
  scanf("%f %f %f %f %f %f %f", data);

  return 0;
}

我不断收到错误消息

warning: more '%' conversions than data arguments [-Wformat]
scanf("%f %f %f %f %f %f %f", data);

我试图在线寻找解决方案,但我不知道为什么,我做错了什么?

3 个答案:

答案 0 :(得分:4)

scanf("%f %f %f %f %f %f %f", data);

应该是这样

scanf("%f %f %f %f %f %f %f", &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6]);

对于初始字符串上的每个%something ,scanf函数都需要一个指向变量的指针,该变量将在其中存储输入值。

您也可以这样写:

scanf("%f %f %f %f %f %f %f", data, data+1, data+2, data+3, data+4, data+5, data+6);

您数组的基本内存地址/指针是 data 。当用 i 求和时,其中 i 是一个正整数,您将获得指向数组中 ith 位置的指针。

答案 1 :(得分:3)

您可以使用循环:

for (int i = 0; i < 7; ++i)
    scanf("%f", &data[i]);

具有错误检测功能:

#include <stdio.h>
#include <stdlib.h>

// ...

int num_values_read = 0;
for (; num_values_read < 7 && scanf("%f", &data[num_values_read]) == 1;
     ++num_values_read);

if (num_values_read != 7) {
    fputs("Input error :(\n\n", stderr);
    return EXIT_FAILURE;
}

答案 2 :(得分:0)

它告诉您出了什么问题,很不幸,您的变量名与错误消息字匹配。 scanf希望格式字符串中每有%个变量。这意味着在您的示例中,它期望有7个变量,但只得到1。