【问题标题】:No output when using void function [closed]使用void函数时没有输出[关闭]
【发布时间】:2021-04-11 22:16:37
【问题描述】:
#include <iostream>
using namespace std;

void reverse() {
  int reversedDigit = 0.0;
  int remainder;
  int num = 0;
  while (num > 0) {
    remainder = num % 10;
    num = num / 10;
    reversedDigit = (reversedDigit * 10) + remainder;
    return;
  }
}

int main () {
  int num;
  cout << "Enter a number:";
  cin >> num;

  reverse();
  return 0;
}

我需要输入int,然后使用 void 函数将其反向打印出来。由于某种原因,我无法输出任何东西。似乎该功能没有被 main 识别。

【问题讨论】:

  • cout 用于输出。您在reverse 函数中的什么地方使用了cout
  • 对于分配,我们不允许在函数内打印输出
  • @ZacharyCorrente 然后你必须通过引用传递一个参数来收集结果,并在它们被收集到函数内部后打印出来。
  • Zachary Corrente,查看循环内对 return; 的需求。
  • 在声明int num=0; 之后,while (num&gt;0) 为真的几率非常非常低。

标签: c++ function output reverse void


【解决方案1】:

已编辑:最好始终避免使用全局范围并使用函数参数。

需要传递输入并接受输出,所以reverse函数需要使用两个参数。例如,我们称它们为inputoutput。 输入可以直接传递,而输出需要通过引用传递,所以函数可以修改它的原始值。

以下示例在输入和输出结果中添加 2:

void doWork(int input, int &output)
{
  output = input + 2;
}

int main()
{
  int input = 0;
  int output = 0;

  cout << "Enter a number: ";
  cin >> input;

  doWork(input, output);

  cout << "Result: " << output;

  return 0;
}

旧答案(使用全局范围):

首先: 您在main 内声明int num,因此reverse 无法访问它。在全局范围内声明 int num(更多关于全局范围的信息见下文)。

第二: 由于不允许从函数reverse 进行打印,因此您将需要全局变量。在任何函数之外声明int reversedDigit,就在void reverse之上,将其初始化为0以避免未定义的行为,并从函数reverse中删除现有的一个。这将使文件范围可以全局访问变量。然后在 reverse 函数中,你可以改变这个变量的值,并在调用 reverse 后从 main 打印出来。

示例代码(输入和输出结果加2):

int input = 0;
int output = 0;

void doWork()
{
  output = input + 2;
}

int main()
{
  cout << "Enter number: ";
  cin >> input;

  doWork();

  cout << "Result: " << output;
}

【讨论】:

  • 我认为所有这些使用全局变量的建议都是错误的。
  • 考虑到他的要求,只有这样才能完成他的任务。他还可以将指针传递给输出变量并在函数内部更改它,但我认为他现在离指针还很远。否则我完全同意你的看法。
  • 这不是真的。函数可以有参数和返回值。
  • 已编辑评论。他只能在这里使用 void。
  • OK(愚蠢的限制,但是嘿); 'void function' 的实际含义并不明显,但您仍然可以在通过引用传递的参数中返回一个值。
【解决方案2】:

#include <iostream>
using namespace std;

int reversedDigit = 0;
int num = 0;
void reverse()
{
    
      int remainder;
      while (num > 0){
      
      remainder = num % 10;
      num = num / 10;

      reversedDigit = (reversedDigit * 10) + remainder;
    }
    cout << reversedDigit << endl;
}


int main ()
{

  cout << "Enter a number:";
  cin >> num;

  reverse();

}

【讨论】:

  • 我明白了,谢谢大家的帮助!
  • 当函数参数和返回值可以使用时,不要使用全局变量。全局变量将使您的代码很难修复和推理。
【解决方案3】:

原因是作用域、函数和主要方法作用域不同,你需要cin>>号;在将解决您的问题的反向函数中

void reverse(){
  int num;
  cout << "Enter a number:";
  cin >> num;
  int reversedDigit = 0.0;
  int remainder;
  
  while (num > 0){ 
     remainder = num % 10;
     num = num / 10;
     reversedDigit = (reversedDigit * 10) + remainder;        
  }
  cout << reversedDigit;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-15
    • 2012-02-18
    • 2016-07-07
    • 2016-09-20
    • 2012-03-21
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多