【问题标题】:printf not yielding input valuesprintf 没有产生输入值
【发布时间】:2015-08-10 11:54:46
【问题描述】:

我有以下代码块。最后一行用于生成用户输入的XYP 值。但是它只返回

(0,0,0)

而不是用户给出的值。我错过了什么?

printf("What is the robot's initial X position? (cm)\n");
scanf("%f",&X);
printf("What is the robot's initial Y position? (cm)\n");
scanf("%f",&Y);
printf("What is the robot's initial angular position? (degrees)\n");
scanf("%f",&P);
printf("The initial position is (%d, %d, %d)\n", X,Y,P);

【问题讨论】:

  • 究竟是什么PrintF???
  • @SouravGhosh 刚刚编辑了我的标题,意思是“printf”
  • 您将 X、Y 和 P 扫描为 doubles,但将它们打印为 ints,它们的类型是什么?

标签: c printf scanf format-specifiers


【解决方案1】:

假设XYP的类型为doublefloat输入部分scanf()),则需要使用%f或@ 987654329@ 格式说明符(根据需要)打印(或扫描)值。

  • 打印floatdouble需要使用%f
  • 扫描float,使用%f,扫描双精度,使用%lf

对特定格式说明符使用错误类型的参数是undefined behaviour%d 需要一个 int 参数。因此,在您的情况下,使用 %d 表示 floatdouble 类型的参数是 UB。

【讨论】:

  • 没有未消费退货造成的问题?
  • @Jongware 没有得到你。在%f 的情况下返回(前导空格)无论如何都会被忽略,对吧?
  • 以防万一有人感兴趣,C11, §7.21.6.2/8
  • 对不起@SouravGhosh,我真的不知道。这是一种有根据的猜测,因为在使用 scanf 时这是一个常见错误。但是我非常讨厌scanf,以至于我从来没有费心去记住它的所有……怪癖,而且我总是使用自己的输入解析器。
  • @Jongware 没关系,我也更喜欢fgets()strtok() 而不是scanf() 大多数时间但不知何故被scanf() 窃听了很多次,以至于它的陷阱几乎记住了。 :-)
猜你喜欢
  • 2016-02-01
  • 2017-01-03
  • 2023-01-02
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多