所以...这是我第一次搞乱函数,几乎从未使用for
,我想创建一个函数,打印hello的次数与参数(n
)一样多说。
#include <iostream>
int say_hello(int n){
for(int n, int t=0; t!=n; t++){
std::cout << "Hello" << std::endl;
}
}
int main(){
say_hello(5);
return 0;
}
但由于所有这些错误,我似乎做了一些可怕的错误。
我想正确学习C ++,并且至少试图避免陷入太多不良习惯,对网站或初学者挑战的任何建议?
答案 0 :(得分:4)
您的问题归结为更换
for(int t=0; t!=n; t++){
与
n
您不需要重新声明for
(因为它是一个函数参数),这也修复了say_hello
循环中的语法错误。该语法错误是所有编译器诊断的原因。通常,第一个编译器诊断是您应该专注的那个。
另外,请勿忘记从void
返回值,或将其设为<div style="font-family: 'Raleway';">
//Content
</div>
返回类型。
答案 1 :(得分:2)
功能中有拼写错误。您不得在隐藏参数的n
语句中声明变量for
。
int say_hello(int n){
for(int n, int t=0; t!=n; t++){
^^^^^^
std::cout << "Hello" << std::endl;
}
}
t
也不是循环中索引的好名称。最好使用名称i
。
此函数也不安全,因为传递给函数的参数可以是负数。
虽然函数返回类型为int
,但函数不会返回任何内容。因此,该函数具有未定义的行为。
因此更正确的函数定义可能看起来像
void say_hello( unsigned int n )
{
for ( unsigned int i = 0; i != n; i++ )
{
std::cout << "Hello" << std::endl;
}
}
或者它可以返回对允许将函数与其他函数链接的流的引用。
例如
std::ostream & say_hello( unsigned int n, std::ostream &os = std::cout )
{
for ( unsigned int i = 0; i != n; i++ )
{
os << "Hello" << std::endl;
}
return os;
}
实际上,局部变量i
未在for语句的主体中使用。所以它可以删除。在这种情况下,您可以使用while循环而不是for循环。例如
std::ostream & say_hello( unsigned int n, std::ostream &os = std::cout )
{
while ( n-- )
{
os << "Hello" << std::endl;
}
return os;
}
答案 2 :(得分:0)
您可以通过以下方式更正for
声明:
// n cannot be negative since we are counting from 0
// hence we have an unsigned int argument
int say_hello(unsigned int n) {
for(unsigned int t=0; t<n; t++) { // t ranges from 0 to n-1 i.e. loop executes n times
std::cout << "Hello" << std::endl;
}
}