2010-01-29 77 views
13

对c来说初学者非常多,实际上这是我的第一个测试程序。如何用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中,我可以用system.out替换printf,它会起作用。我试着早些时候搜索答案,但如果你不知道要搜索什么,很难找到答案。

+1

您可能会发现http://www.cppreference.com/wiki/非常有帮助,请参阅标准C库的部分。 – 2010-01-29 15:06:21

回答

31

试试这个:

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

这里的documentation for printf

+7

可能要添加换行符或'fflush(stdout)'。 – 2010-01-29 15:07:16

17

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参考手册以获取完整列表。

+2

我不能良心良知upvote答案,建议printf()。我们没有学会总是明确指定格式字符串吗?不过,我喜欢其他答案。 – 2010-01-29 15:58:58

+0

@AndrewColeson我不明白你在说什么。这个答案使用''Hello,world \ n“'格式,它不会包含任何替换和其他格式。格式为“始终明确指定”。 – 2013-05-05 20:24:50

+1

@PascalCuoq他在谈论'printf(问候语)',在这个例子中这是无害的,但仍然让我(以及其他人)畏缩一点。 – Cubic 2013-05-05 20:47:04

0

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

所以,如果你只是给它一个整数,它就会欢快地通过存储在您的整数的存储位置前进,无论倾倒垃圾有没有在屏幕上,直到它正好碰到包含字节0

对于Java程序员来说,我想这是对C缺乏类型检查的一个相当粗鲁的介绍。相信我,这只是冰山一角。这就是为什么当我鼓励你通过学习C扩展你的视野时,我强烈建议你尽一切可能避免编写真正的程序。

(这同样适用于其他人阅读这一点。)