这段代码编译没有任何错误,但为什么它在 5 之后不打印“Hello”?
#include<stdio.h>
#include<conio.h>
int main()
{
int number = 5;
printf("%d",number,"Hello");
getch();
}
%s
除了占位符之外,您还需要占位%d
符。见下文:
printf( "%d %s", number, "Hello" );
...注意这"Hello"
是一个字符串文字(因此是一个NULL
终止的字符串),这意味着%s
如果您希望"Hello"
作为参数传递,则需要一个占位符。由于您使用的是字符串文字,我建议您只需执行以下操作:
printf( "%d Hello", number );
评论:
%d
占位符用于整数。%s
占位符用于字符串(终止的NULL
字符数组)。printf
只打印第一个参数(即格式)包含的内容。
printf("%d %s", number, "Hello");
%s
格式用于字符串("Hello"
是字符串字面量)。
你还没有给你的格式字符串一个标记来打印你的第二个参数。
制作这一行:
printf("%d",number,"Hello");
这个:
printf("%d%s",number,"Hello");
printf()
将仅打印格式字符串中指定的内容。您的格式字符串提供了一个转换说明符和与之对应"%d"
的参数。number
没有对应于参数的转换说明符"Hello"
,因此该参数被丢弃。要打印那个,您需要另一个转换说明符:
printf ("%d %s", number, "Hello");
或者更好,因为它无论如何都是字符串文字:
printf ("%d Hello", number);
任何一个
printf("%d %s", number, "Hello")
或者
printf("%d Hello", number)
会工作。
其他答案明确提到你应该%s
在你的printf()
with 中使用%d
,要知道为什么它没有显示任何错误但仍然不打印“hello”,你应该考虑以下几点:
printf()
是一个可变参数函数,即它接受可变数量的参数。在这里,您提供 3 个参数,即:"%d"、number和"hello"。printf()
可以有一个、两个、三个或更多参数,这使编译器无法使用其通常的方法进行错误检查。%d
)的数量与值的数量相匹配;编译器不会捕捉到这种错误。由于“hello”没有匹配的格式说明符,它不会打印它。至于为什么,正如我所说,它不是语法错误,它不违反 C 规则,因此,编译器没有检测到它们。注意- printf()
andscanf()
函数使用第一个参数来指示有多少额外的参数即将到来。诀窍是初始字符串中的每个格式规范都指示一个附加参数。
此外,摆脱conio.h
和getch()
两者都是非标准的,如果您使用的是 TURBO C,请离开它并搜索其他一些编译器。
printf 函数采用各种数量的参数( ... )并打印第一个 N 参数(N 是占位符的数量)。printf 函数不知道参数的数量。
您的格式字符串中只有一个占位符。尝试:
printf("%d %s", number, "Hello");
这应该打印: 5 Hello
printf("%d %s",number,"Hello");
^
Here it is.