【问题标题】:How to print in C如何在 C 中打印
【发布时间】:2020-12-13 17:04:24
【问题描述】:

C 的初学者,事实上这是我的第一个测试程序。

我实际上不知道如何将这个号码打印到终端。

#include <stdio.h>

int addNumbers(int a, int b)
{
    int sum = a + b;
    return sum;
}

int main(void)
{
    int a = 4;
    int b = 7;

    printf(addNumbers(a,b));
    return 0;
}

我确信在 Java 中我可以将 printf 替换为 System.out 并且它会起作用。我之前尝试过搜索答案,但如果您不知道要搜索什么,则很难找到答案。

【问题讨论】:

标签: c


【解决方案1】:

试试这个:

printf("%d", addNumber(a,b))

这是documentation for printf

【讨论】:

  • 可能要添加换行符或fflush(stdout)
【解决方案2】:

printf() 的第一个参数始终是一个字符串值,称为格式控制字符串。该字符串可能是常规文本,如

printf("Hello, World\n"); // \n indicates a newline character

char greeting[] = "Hello, World\n";
printf(greeting);

这个字符串还可以包含一个或多个转换说明符;这些转换说明符指示已将其他参数传递给printf(),并且它们指定如何格式化这些参数以进行输出。例如,我可以将上面的内容更改为

char greeting[] = "Hello, World";
printf("%s\n", greeting);

“%s”转换说明符需要一个指向以 0 结尾的字符串的指针,并将其格式化为文本。

对于有符号十进制整数输出,使用“%d”或“%i”转换说明符,例如

printf("%d\n", addNumber(a,b));

您可以将常规文本与转换说明符混合,如下所示:

printf("The result of addNumber(%d, %d) is %d\n", a, b, addNumber(a,b));

请注意,控制字符串中的转换说明符表示附加参数的编号类型。如果传递给printf() 的附加参数的数量或类型与格式字符串中的转换说明符不匹配,则行为未定义。例如:

printf("The result of addNumber(%d, %d) is %d\n", addNumber(a,b));

将导致从乱码输出到彻底崩溃的任何事情。

有许多用于控制字段宽度、精度、填充、对齐和类型的转换说明符的附加标志。查看您方便的 C 参考手册以获取完整列表。

【讨论】:

  • 我不能凭良心对建议 printf() 的答案投赞成票。我们还没有学会始终明确指定格式字符串吗?不过,我喜欢其余的答案。
  • @AndrewColeson 我不明白你在说什么。此答案使用格式"Hello, world\n",恰好不包含任何替换和其他内容。格式为“始终明确指定”。
  • @PascalCuoq 他说的是printf(greeting),这在这个例子中是无害的,但仍然让我(可能还有其他人)有点畏缩。
  • @Cubic 在学会跑步之前,必须先学会走路。在学习安全地使用printf(),更重要的是,显然安全地使用printf(),以便审阅者可以将注意力集中在实际问题上之前,必须了解printf() 可以使用指向const char 的指针,任何指向const char 的指针。跳过该过程中的步骤只会导致“迷信编程”,在 C 的情况下已经太多了。对于将整数作为printf() 的第一个参数传递的人来说,这个答案是正确的答案。
【解决方案3】:

printf 比这要复杂一些。您必须提供格式字符串,然后提供要应用于格式字符串的变量。如果您只提供一个变量,C 将假定它是格式字符串并尝试打印出它在其中找到的所有字节,直到它遇到终止的 nul (0x0)。

所以如果你只给它一个整数,它会在你的整数存储位置愉快地在内存中前进,将那里的任何垃圾倾倒到屏幕上,直到它碰巧遇到一个包含 0 的字节。

对于 Java 程序员,我想这是对 C 缺乏类型检查的粗鲁介绍。相信我,这只是冰山一角。这就是为什么,虽然我赞赏你希望通过学习 C 来扩展你的视野,但我强烈建议你尽你所能避免用它编写真正的程序。

(这也适用于其他阅读本文的人。)

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多