c - 使用浮点转换代码 (%f) 打印整数?

标签 c

所以我一直在研究 C 编程并买了一本书。章节末尾有一个问题:

编写一个程序,定义五个整型变量并将它们初始化为 1、10、100、1000、10000。然后使用十进制转换代码 (%d) 将它们打印在以空格字符分隔的单行上,并在包含浮点转换代码 (%f) 的嵌套行。请注意结果之间的差异。你如何向他们解释?

现在,我的问题是如何对定义为 int 的数字使用 float 转换代码?

这是我到目前为止所写的内容:

#include <stdio.h>

int main(void)
{
    int one = 1; 
    int ten = 10;
    int hundred = 100; 
    int thousand = 1000;
    int tenThous = 100000;

    printf("%d %d %d %d %d \n", one, ten, hundred, thousand, tenThous);
    printf("%f %f %f %f %f \n", one, ten, hundred, thousand, tenThous);

    return 0; 
}

按照他们描述问题的方式,我认为我必须使用我定义的 int 变量。制作一组新的数字并将它们声明为 float 很容易,但我不认为这正是他们所要求的。

编译时收到的错误消息是:

numPrint.c:12:33: warning: format specifies type 'double' but the argument has
      type 'int' [-Wformat]
    printf("%f %f %f %f %f \n", one, ten, hundred, thousand, tenThous);
            ~~                  ^~~
            %d

它遍历所有 int 变量,表示格式指定为“double”并且使用的变量是“int”

有办法做到这一点吗?

最佳答案

Is there a way to do this?

已经做到了。这些消息是警告;他们不会中止编译。

或者您可能会问是否可以在不引发警告的情况下执行此操作?你当然可以。该消息告诉您特定诊断与哪个警告标志相关:-Wformat。您可以通过传递 -Wno-format 作为命令行选项来禁用这些警告。

但你不应该。

这些警告告诉您代码中存在真正的问题。正如它所解释的,%f 描述符期望相应的参数具有 double 类型。另外,float 也可以工作,因为它在这个特定的上下文中会自动转换为 double,但如果参数具有不同的类型,则行为是未定义的。您可以将参数转换为 double 类型,但这不是我解释文本要求您执行的操作。

你应该做什么?把书烧掉,买一本更好的。真的。 C 教科书没有理由建议你按照你的教科书的建议去做。即使只是措辞不佳,你也不得不想知道还有什么其他臭东西在那里等着你。烧掉这本书而不是归还或赠送它构成了一种社区服务。

关于c - 使用浮点转换代码 (%f) 打印整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56606918/

相关文章:

c - alá insight for windows

c - 在编译时和/或运行时检测正在运行的 Linux 发行版?

c - K&R C 示例中的指针类型不匹配警告

c - 重定向标准流

c - 冒泡排序不排序和额外元素

c - "Assignment to expression with array type"错误

c - Windows 上的 LibVNC 编译错误 : Unresolved External Symbol

c - 使用 32 位地址获取 64 位值

C - CS50 pset1 马里奥金字塔挑战

c - 如何在 vim 中使用大量参数调试/重新格式化 C printf 调用?