我是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);
我试图在线寻找解决方案,但我不知道为什么,我做错了什么?
答案 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。