可视化 在C++编程中编写一个函数星号

visual Write a function ASTERISK in C++ Programming

本文关键字:一个 函数 C++ 编程 可视化      更新时间:2023-10-16

我做了一个编码,接受来自用户的整数,并输出相应数量的星号。例如:

Please enter a number: 10
* * * * * * * * * * 

我必须使用函数概念来完成编码。我设法获得了正确数量的星号,但后面的"0"不会消失。

#include<iostream>
using namespace std;
int NUMBER, i; 
int ASTERISK (int NUMBER);
int main ()
{
    cout << "Enter a number: " ;
    cin >> i ;
    cout << ASTERISK (i); 
    return 0;
}
int ASTERISK (int NUMBER){
    int ANSWER;
    for (NUMBER=1; NUMBER<=i; NUMBER=NUMBER+1){
        cout << "* " ;
    }
    return ANSWER;
}

此行是导致有问题的零的原因:

cout << ASTERISK (i); 

这要求打印 ASTERISK (i) 返回的值。

int ASTERISK (int NUMBER){
    int ANSWER;
    for (NUMBER=1; NUMBER<=i; NUMBER=NUMBER+1){
        cout << "* " ;
    }
    return ANSWER;
}

ASTERISK 的定义中,您打印一个星号NUMBER返回值 ANSWER 这是一个未初始化的整数,在您的情况下恰好为零。

这很糟糕,原因有两个:

  • 操纵非外行化值通常是未定义的行为,可能会产生很多不良后果。真的很糟糕。
  • 在不需要时返回值会使代码更难维护。

作为解决方案,不返回任何内容ASTERISK

ASTERISK (i); 
// ...
void ASTERISK (int NUMBER) {
    for (NUMBER=1; NUMBER<=i; NUMBER=NUMBER+1){
        std::cout << "* " ;
    }
}

最后,您完全错过了作用域变量的重点。尝试通过不使用全局变量尽快获得这个重要概念。通过一些改进,您的函数将变为:

void print_asteriks(int count) {
    for (int n=0 ; n<count ; ++n) {
        std::cout << "* ";
    }
}

那个零来自cout << ASTERISK (i);

将其替换为ASTERISK (i);

像其他人已经提到的一样,问题是您使用cout << ASTERISK(i)输出ASTERISK(i)的返回值

事实上,你根本不需要这个返回值,因为你的函数从不使用它(它甚至没有被初始化,这会导致未定义的行为(,所以最好把它全部排除在外。

在这个用例中使用全局变量似乎也不是真的必要,所以我建议使用局部变量,所以我建议改为

void ASTERISK (int number);
int main ()
{
    std::cout << "Enter a number: " ;
    int number;
    std::cin >> number;
    ASTERISK(number); 
    return 0;
}
void ASTERISK (int number){
    for (int i=0; i!=number; ++i){
        std::cout << "* ";
    }
}