我是C的新手并开始浏览Learn C(http://www.learn-c.org/)。在功能部分,练习要求用户打印x is big
如果x
> 10.我的问题是正式答案是
int print_big(int number){
if(number > 10){
printf("%d is big\n",number);
}
}
为什么输出类型为int
而不是void
类型?另外,有人可以解释当输出类型为x is big
时函数如何打印integer
文本?是因为x is big
文本足够小以适应内存"容器"一个整数适合?
答案 0 :(得分:6)
理想情况下,函数应该返回void,因为函数没有为调用者返回任何内容。
void print_big(int number){
if(number > 10){
printf("%d is big\n",number);
}
答案 1 :(得分:6)
你的功能应该是..
void print_big(int number){
if(number > 10){
printf("%d is big\n",number);
}
因为你没有返回任何内容..你的函数应该是function with argument and without return type
的类型。
答案 2 :(得分:1)
另外,有人可以解释一下当输出类型是整数时函数是如何打印的x是大文本吗?
输出和返回值是两个完全不同的东西;文本没有返回给函数的调用者,它只是被写入标准输出流。
如上所述,没有被返回给函数的调用者。它会像这样使用:
void foo( void )
{
int val = 0;
printf( "gimme a number: " );
scanf ( "%d", &val );
print_big( val );
}
请注意,foo
并未将print_big
的结果分配给任何内容;我们的意思是"来电者没有使用值"。无论返回什么,都会被丢弃。
正如评论中所提到的,解决方案代码可能是在1989年语言标准之前的K& R天(20世纪70年代末至80年代中期)的延续。直到1989年的标准,没有void
类型;标准做法是使函数类型int
和调用者不使用返回值。虽然这并不能解释解决方案代码中缺少return
语句。
或者它可能只是写得不好的代码(更有可能);不幸的是,有很多人认为他们认识C并希望分享他们的知识,但是他们犯了很多错误,并传递了许多错误信息和不良做法。警惕所有在线教程和大多数印刷参考。
官方解决方案应该是键入void
:
void print_big( int number )
{
if ( x > number )
printf( "x is big\n" );
}
或它应该有一个明确的return语句:
int print_big( int number )
{
if ( x > number )
printf( "x is big\n" );
return 0;
}
从这个讨论中可以明显看出,函数返回的值不会使用。例如,printf
函数返回写入输出流的字节数,但您不会经常看到明确检查该结果的代码;结果通常被丢弃(即,没有分配给任何东西)。同样,scanf
会返回成功转化和分配的次数。同样,很多人只是忽略了这个结果(尽管他们不应该这样做)。
答案 3 :(得分:0)
嗨Dude每当你想将值返回给调用函数时,你应该使用int作为返回类型。在大约代码中,您在同一功能块中打印值,而您不需要将值返回给调用函数。 如果要将值返回给调用函数,那么我们使用int作为返回类型,请参阅代码:
int print_big(int number){
if(number > 10){
printf("%d is big\n",number);
return 1; //if number is greater than 10 then return 1
}
else{ return 0;//if false
}
}