函数和for循环:第一次搞乱它现在它只是一团糟

时间:2017-02-21 09:27:28

标签: c++ for-loop

所以...这是我第一次搞乱函数,几乎从未使用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;
}

但由于所有这些错误,我似乎做了一些可怕的错误。

  • 错误:预期在'int'之前的unqualified-id
  • 错误:预期';'在'int'之前
  • 警告:对于增量表达式无效[-Wunused-value]
  • 错误:预期')'之前';'令牌
  • 错误:未在此范围内声明't'
  • 错误:预期';'在')'令牌之前
  • 警告:函数返回non-void [-Wreturn-type]
  • 时没有return语句

我想正确学习C ++,并且至少试图避免陷入太多不良习惯,对网站或初学者挑战的任何建议?

3 个答案:

答案 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;
    }
}