Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否使用了错误的转换说明符?scanf()不是';t在c中工作_C_Scanf - Fatal编程技术网

我是否使用了错误的转换说明符?scanf()不是';t在c中工作

我是否使用了错误的转换说明符?scanf()不是';t在c中工作,c,scanf,C,Scanf,在c中使用以下代码行时,scanf()无法正常工作: double withdraw = 0; scanf("%.2lf",&withdraw); printf("\n\nWithdraw %.2lf?",&withdraw); 这是: double withdraw = 0; scanf("%.2lf",withdraw); printf("\n\nWithdraw %.2lf?",withdraw); double withdraw = 0; scanf("%.

在c中使用以下代码行时,scanf()无法正常工作:

double withdraw = 0;

scanf("%.2lf",&withdraw);

printf("\n\nWithdraw %.2lf?",&withdraw);
这是:

double withdraw = 0;

scanf("%.2lf",withdraw);

printf("\n\nWithdraw %.2lf?",withdraw);
double withdraw = 0;

scanf("%.2lf",&withdraw);

printf("\n\nWithdraw %.2lf?",withdraw);
这是:

double withdraw = 0;

scanf("%.2lf",withdraw);

printf("\n\nWithdraw %.2lf?",withdraw);
double withdraw = 0;

scanf("%.2lf",&withdraw);

printf("\n\nWithdraw %.2lf?",withdraw);
最后是:

double withdraw = 0;

scanf("%.2lf",withdraw);

printf("\n\nWithdraw %.2lf?",&withdraw);
scanf()的输入始终如下所示:

1
0.00
提取的输出总是这样:

1
0.00

请帮忙。这对我来说太疯狂了

是的,您的代码是错误的。不能将精度(
)用于
fscanf()
族,这是无效的。这导致了

引用
C11
,第§7.21.6.2/p3章,
fscanf()

每个转换规范都由字符
%
引入。 在
%
之后,将依次显示以下内容:

-抑制字符
*
的可选赋值

-大于零的可选十进制整数,用于指定最大字段宽度 (以字符表示)

-指定接收对象大小的可选长度修改器

-一种转换说明符字符,用于指定要应用的转换类型

第13页

如果转换规范无效,则行为未定义



也就是说,不要使用试错法,这是很难捕捉和理解的。阅读手册页面,了解任何参数类型的正确格式说明符。

正如编译器告诉您的那样

warning: unknown conversion type character ‘.’ in format [-Wformat=]

因此,您无法使用这种格式说明符指定精度,以下方法可能有效

#include <stdio.h>
#include <math.h>

int main()
{
    double withdraw = 0;

    scanf("%lf", &withdraw);
    printf("\n\nWithdraw %.2lf?", withdraw);

    return 0;
}
#包括
#包括
int main()
{
双退=0;
scanf(“%lf”,&draw);
printf(“\n\n使用Draw%.2lf?”,撤消);
返回0;
}

printf(“\n\nWithdraw%.2lf?”,&Draw)-->
printf(“\n\nWithdraw%.2lf?”,撤消)…删除打印调用中的
&
。我已经尝试了所有4个版本的已发布代码块,这就是为什么我觉得它很有趣的原因。代码的第3个变体满足您的要求,仍然输出0。00@Teddy...eh? 转换规范是否仍然无效?为什么不检查
scanf()
中的返回值?它没有返回
1
,是吗?经常检查输入操作的状态-确保你得到了你期望得到的,如果你没有得到,就做点什么。“非常感谢你们!我通过取消scanf()中的精度修复了我的问题@Yunnosch感谢你的评论,我已经做了修改,尽管我坚信前面的修改是完全合理的,学习的第一步是学会承认错误并愿意改正。如果,iff,有一种文化阻止了这一点,我不太确定未来是否会继续走这条路。没有怨恨,没有私事。我使用的是Dev-C++编译器一定很糟糕,因为它没有捕获它。@TeddyBearWithACape您必须在编译器中使用
-Wall
选项。最好使用的
-Wall-Wextra-pedantic
@TeddyBearWithACape Dev-C++是一个IDE,而不是一个编译器。您的编译器可能是
gcc
。我知道Dev-Cpp是一个IDE,这就是为什么说编译器不是Dev-Cpp。知道它可能是
gcc
很有用。请解释差异及其原因。另外,“可以工作”听起来像是未经测试的,我相信这不是你的意思。也许“这对你有用,诀窍是……”。只是为了更好地感谢您的帮助性回答。@Yunnosch谢谢您的建议。原因是不能在scanf中使用“.”。