gpt4 book ai didi

c - float 被视为双重

转载 作者:行者123 更新时间:2023-12-04 12:37:04 26 4
gpt4 key购买 nike

当使用 Xcode 运行这个小的 C 脚本时,我收到这条消息:

Format specifies type 'float *' but the argument has type 'double" at scanf("%f", v) and scanf("%f", i).

我不明白,因为我还没有声明任何 double 类型的变量。

int main(int argc, const char * argv[]) {
char choice[10];

float v;
float i;
float r;

printf("What would you like to calculate?: ");
scanf("%s", choice);
printf("\nYou chose: \n""%s", choice);

if (strcmp(choice, "r") == 0)
{
printf("\nPlease enter voltage (V): \n");
scanf("%f", v);

printf("\nPlease enter current (I): \n");
scanf("%f", i);

r = v/i;

printf("%f", r);
}
}

有什么想法吗?

最佳答案

您收到该警告是因为您未能将指向 float (float*) 的指针传递给函数 scanf。编译器告诉您它是 double 的,因为 scanfvariadic function .可变参数受默认参数提升的约束,其中某些数据类型的参数被转换为更大的数据类型。在这种情况下,float 被提升为 double

C 中的函数修改变量 vichoice 的唯一方法是将它们作为指针传递,因此您需要使用 &“address of”运算符将指针传递给 scanf

您的代码应如下所示:

int main(int argc, const char * argv[]) {
char choice[10];

float v;
float i;
float r;

printf("What would you like to calculate?: ");
scanf("%9s", &choice); /* this specifier prevents overruns */
printf("\nYou chose: \n""%s", choice);

if (strcmp(choice, "r") == 0)
{
printf("\nPlease enter voltage (V): \n");
scanf("%f", &v); /* use a pointer to the original memory */

printf("\nPlease enter current (I): \n");
scanf("%f", &i); /* use a pointer to the original memory */

r = v/i;

printf("%f", r);
}
}

另请注意,我使用了格式说明符 %9s。这样,如果用户输入超过 9 个字符,相邻的内存将不会被覆盖。您必须为空字符 \0 保留数组的最后一个元素,因为 C 中的字符串以 \0 结尾。

关于c - float 被视为双重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com