Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我试图编写一个函数,它计算C++中的数字根,但编译后会出错。_C++ - Fatal编程技术网

我试图编写一个函数,它计算C++中的数字根,但编译后会出错。

我试图编写一个函数,它计算C++中的数字根,但编译后会出错。,c++,C++,这是我写的代码,第一个函数计算一个数的位数之和。第二个函数使用循环重复计算数字之和,直到获得一位数字,即数字根 但是当我编译代码时,我得到的是 5:29:错误:此处不允许在“{”标记主标记的第一行之前使用函数定义 22:2:错误:输入最后一行末尾应为“}” 如果您能提供一些指导,我们将不胜感激。正如人们在评论中指出的那样,您不应该在这样的另一个函数中定义函数 int main(){ int sum_digits(int tiv) { int sum = 0; while (tiv

这是我写的代码,第一个函数计算一个数的位数之和。第二个函数使用循环重复计算数字之和,直到获得一位数字,即数字根

但是当我编译代码时,我得到的是

5:29:错误:此处不允许在“{”标记主标记的第一行之前使用函数定义

22:2:错误:输入最后一行末尾应为“}”


如果您能提供一些指导,我们将不胜感激。

正如人们在评论中指出的那样,您不应该在这样的另一个函数中定义函数

int main(){
int sum_digits(int tiv) {
    int sum = 0;
    while (tiv > 0) {
        sum += tiv % 10;
        tiv /= 10;
    };
    return sum;
};

int num_root(int num) {
  int root = sum_digit(int num);
  while(root > 9) {
      sum_digits(int root);
      };
  return root;
};
return 0;
}
我总是鼓励适当的代码缩进,因为那样会使这个问题更加明显

此外,这不是执行函数调用的正确方法:

int main(){
   // This is defined inside of main
   int sum_digits(int tiv) {
      int sum = 0;
      while (tiv > 0) {
这里不需要再次包含int,事实上,这样做在语法上是无效的——从代码的其余部分可以清楚地看出num是int

这里也一样:

int root = sum_digit(int num);
另外,实际上对sum_数字的返回值不做任何处理,因此这实际上什么也不做。如果root大于9,则它将是一个无限循环,因为root的值永远不会更改;如果root小于9,则该循环将永远不会运行


最后一点:为了让这个程序实际执行任何操作,您必须使用一些值从主方法调用函数。现在,即使您修复了编译错误,程序也无法工作,因为您实际上无法确定要作为根的值,而且您从未实际调用您编写的函数。

在函数中定义函数在c/c++中是不应该做的。我认为gcc支持这一点,但afaik不符合标准


只需声明和定义您的函数,而不是在其他函数中。如果要在公共api中隐藏匿名名称空间,请使用匿名名称空间

将函数移到main之外。如果在第2行的函数中定义了一个函数,我认为您并不是有意这么做的。我的任务是使用函数sum_digitsint tiv计算数字根,所以我需要这样做。@Power No,您打算调用main中的sum_数字。定义函数和调用函数是有区别的。要调用它,请在main之外定义sum_数字,然后添加一行,如int i=sum_digits 5;内干线。@JustinTime啊,好吧,我得到了关于在外干线声明的部分。所以,按照同样的逻辑,我也应该在main之外定义num_root,对吗?好的,我明白了再次声明变量类型在语法上无效的要点。关于输入和输出,我的任务只是编写返回值的函数,而不是将其打印出来,所以我从不为这些问题烦恼。但是关于使用while执行的操作,使用root>9作为确定整数是否有多个数字的方法是错误的吗?@Power我指的问题是,如果循环运行,这将是一个无限循环,因为在赋值之后,您从未真正修改root的值,也从未对sum_数字返回的值执行任何操作。因此,如果root开始大于9,它将始终大于9,因为它从未被实际修改。好的,我将尝试使用另一种方法,而不是while,我现在看到它将无限运行,感谢您清除它。@Power问题不是while循环本身,主要的问题是根永远不会被修改这一事实使得它是无限的。
while(root > 9) {
  sum_digits(int root);
};