-2

这段代码编译没有任何错误,但为什么它在 5 之后不打印“Hello”?

#include<stdio.h>
#include<conio.h>

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

10 回答 10

2

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

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

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

printf( "%d Hello", number );

评论:

  1. %d占位符用于整数。
  2. %s占位符用于字符串(终止的NULL字符数组)。
于 2013-08-15T17:04:15.133 回答
1

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

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

  printf("%d %s",number,"Hello");
于 2013-08-15T17:04:49.660 回答
1

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

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

%s格式用于字符串("Hello"字符串字面量)。

于 2013-08-15T17:04:29.810 回答
1

你还没有给你的格式字符串一个标记来打印你的第二个参数。

制作这一行:

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

这个:

printf("%d%s",number,"Hello");
于 2013-08-15T17:04:33.093 回答
1

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

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

或者更好,因为它无论如何都是字符串文字:

printf ("%d Hello", number);
于 2013-08-15T17:07:14.327 回答
1

任何一个

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

或者

printf("%d Hello", number)   

会工作。

于 2013-08-15T17:20:02.097 回答
0

其他答案明确提到你应该%s在你的printf()with 中使用%d,要知道为什么它没有显示任何错误但仍然不打印“hello”,你应该考虑以下几点:

  1. 首先printf()是一个可变参数函数,即它接受可变数量的参数。在这里,您提供 3 个参数,即:"%d"number"hello"
  2. 大多数函数采用特定数量的参数,编译器可以检查您是否使用了正确的数量。但是,printf()可以有一个、两个、三个或更多参数,这使编译器无法使用其通常的方法进行错误检查。
  3. 作为程序员,您的工作是确保格式说明符(此处%d)的数量与值的数量相匹配;编译器不会捕捉到这种错误。由于“hello”没有匹配的格式说明符,它不会打印它。至于为什么,正如我所说,它不是语法错误,它不违反 C 规则,因此,编译器没有检测到它们。

注意- printf()andscanf()函数使用第一个参数来指示有多少额外的参数即将到来。诀窍是初始字符串中的每个格式规范都指示一个附加参数。

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

于 2013-08-16T02:24:28.843 回答
0

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

于 2013-08-15T18:52:55.717 回答
0

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

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

这应该打印: 5 Hello

于 2013-08-15T17:05:36.587 回答
0
printf("%d %s",number,"Hello");
           ^
           Here it is.
于 2013-08-15T17:20:44.417 回答