为什么不打印“你好”?

时间:2013-08-15 17:03:36

标签: c printf

此代码编译没有任何错误,但为什么它不会在5?

之后打印“Hello”
#include<stdio.h>
#include<conio.h>

int main()
{
    int number = 5;
    printf("%d",number,"Hello");
    getch();
}

10 个答案:

答案 0 :(得分:2)

%s占位符外,您还需要%d占位符。见下文:

printf( "%d %s", number, "Hello" );

...请注意"Hello"是一个字符串文字(因此是一个NULL终止的字符串),这意味着如果您希望传递%s,则需要"Hello"占位符作为一个论点。由于您使用的是字符串文字,我建议您按照以下步骤操作:

printf( "%d Hello", number );

<强>注:

  1. %d占位符是一个整数。
  2. %s占位符用于字符串(NULL已终止的字符数组)。

答案 1 :(得分:1)

printf只打印第一个参数(即格式)包含的内容。

printf("%d %s", number, "Hello");

%s格式适用于字符串("Hello"字符串litteral )。

答案 2 :(得分:1)

您没有为格式字符串指定打印第二个参数的标记。

建立这一行:

printf("%d",number,"Hello");

此:

printf("%d%s",number,"Hello");

答案 3 :(得分:1)

这是因为字符串需要%s说明符。阅读格式说明符here  改变

 printf("%d",number,"Hello");

  printf("%d %s",number,"Hello");

答案 4 :(得分:1)

printf()将仅打印格式字符串中指定的内容。您的格式字符串提供了一个转换说明符"%d"和与之对应的参数number。没有与参数"Hello"对应的转换说明符,因此该参数将被丢弃。要打印那个,你需要另一个转换说明符:

printf ("%d %s", number, "Hello");

或更好,因为它仍然是一个字符串文字:

printf ("%d Hello", number);

答案 5 :(得分:1)

要么

printf("%d %s", number, "Hello")   

printf("%d Hello", number)   

会奏效。

答案 6 :(得分:0)

您的格式字符串中只有一个占位符。尝试:

printf("%d %s", number, "Hello");

这应该打印: 5你好

答案 7 :(得分:0)

printf("%d %s",number,"Hello");
           ^
           Here it is.

答案 8 :(得分:0)

printf函数接受各种参数(...)并打印第一个N参数(N是占位符数)。 printf函数不知道参数的数量。

答案 9 :(得分:0)

其他答案显然提到您应该在%sprintf()中使用%d,以便知道它为什么不显示任何错误但仍然无法打印“你好“你应该考虑以下几点:

  1. 首先printf()是一个可变函数,即它需要可变数量的参数。在这里,您提供3个参数:“%d”数字“hello”
  2. 大多数函数都使用特定数量的参数,编译器可以 检查您是否使用了正确的号码。但是,printf()可以有一个,两个, 三个或更多参数,这使编译器不会使用其常用的错误方法 检查。
  3. 作为程序员,您的工作是确保格式说明符的数量(此处%d)与值的数量相匹配; 编译器不会捕获那种错误。由于“hello”没有匹配的格式说明符,因此不会打印它。 AS为什么,正如我所说,它不是语法错误,它不违反C规则,因此,编译器不会检测它们。
  4. 注意 - printf()scanf()功能 使用第一个参数来表示将要有多少其他参数。诀窍在于 初始字符串中的每个格式规范都表示另一个参数。

    此外,摆脱conio.hgetch()两者都是非标准的,如果您使用的是TURBO C,请离开它并搜索其他一些编译器。