c++ - 在 C++ 编程中编写函数 ASTERISK

标签 c++ visual-c++

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

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,它是一个未初始化的整数,在您的情况下恰好为零。

这很糟糕,原因有二:

  • 操作未初始化的值通常是未定义的行为,可能会产生很多不良后果。 Really bad .
  • 在不需要时返回一个值会使代码更难维护。

作为解决方案,让 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 << "* ";
    }
}

关于c++ - 在 C++ 编程中编写函数 ASTERISK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325613/

相关文章:

visual-c++ - 如何在WTL中模拟模式对话框?

c++ - 初始化 dll 之间共享的变量

C++ Const 函数参数或声明中的正确性

c++ - 显示来自 api 返回数据的特定数据,C++ REST SDK a.k.a Casablanka

visual-studio - OpenCV Build on Visual Studio LINK 错误

c++ - getline 无法正常工作?可能是什么原因?

c++ - 在 Visual C 2010 项目中包含一个 Visual 2005 库

c++ - 通过地址/引用传递的问题

C++17类模板偏推

visual-studio-2010 - 在opencv中用imshow显示max()函数的结果