'system' was not declared in this scope 错误

'system' was not declared in this scope error

所以我在其他程序中没有遇到这个错误,但我在这个程序中遇到了。

这个程序是一个我没有得到错误的例子。

#include<stdio.h>

int main() {



    system("pause");
} // end main

但是在下面这个程序中我得到了错误

#include <stdio.h>
//#include <stdlib.h>

// Takes the number from function1, calculates the result and returns recursively.
int topla (int n) {
    if(n == 1)
    return 3;
    else
        return topla(n-1) + topla(n-1) + topla(n-1);
}

// Takes a number from main and calls function topla to find out what is 3 to the
// power of n 
int function1(int n) {
    return topla(n);
}

int main() {
    int n; // We us this to calculate 3 to the power of n

    printf("Enter a number n to find what 3 to the power n is: ");
    scanf("%d", &n);
    function1(n);

    system("pause");
} // end main

只需包含 stdlib.h,但不要使用 system("pause"),因为它不是标准的并且不会在每个系统上工作,只是一个简单的 getchar() 或一个涉及 getchar() 的循环,因为你已经使用了 scanf()) 应该可以解决问题。

并且通常 system("pause") 可以在 windows 命令行程序中找到,因为 windows 命令提示符会在程序退出时关闭,所以可能 运行 来自命令提示符的程序直接会有所帮助,或者使用 IDE 来解决这个问题,例如 geany.

如果 scanf() 最后始终检查 return 值,而不是假设它有效。

注:此代码

return topla(n - 1) + topla(n - 1) + topla(n - 1)

你可以写成

return 3 * topla(n - 1);

而不是递归调用 topla() 3 次。

而且你并不真正需要 else 因为函数 returns 除非 n != 1 所以即使没有 else 递归也会在 n == 1.

在这里你需要了解两件事。

首先,您的代码运行良好,程序确实找到了 3^n 的值。所以不用担心。

来到 system() 部分,

为了使用 system(); 函数,您需要包含 stdlib.h header 文件,因为该函数在 header 中声明。

因此,最好包含 header(而不是对其进行评论)。

现在,在windows中使用了pause关键字来阻止控制台在程序完成后关闭,它只适用于windows。

请注意,system("pause"); 也不是标准,它不适用于其他机器,即 linux,因为使用系统命令,您直接与命令行交互。在这方面,每个操作系统的命令都是特定的,不能用于其他OS.

所以最好使用 getchar(); ,一个 C 标准库函数,来控制控制台 window.

system 函数在标准 header <stdlib.h> 中声明。如果您的程序调用 system(),您 必须

#include <stdlib.h>

在源文件的顶部或附近。

但是您的部分问题是:为什么在您省略 #include 指令时编译器没有报错?

1990 年的 C 标准(有时称为 "ANSI C")允许调用未明确声明的函数。如果你写,例如:

system("pause");

没有可见的 system 函数声明,假设 system 是用 int 的 return 类型声明的,并且参数与中的参数匹配调用——在本例中,是 char* 类型的单个参数。这恰好与 system 的实际声明一致,因此对于 C90 编译器,您可以省略 #include 指令。一些支持 1999 年和 2011 年最新标准(不允许隐式声明)的 C 编译器仍然允许旧形式,可能带有警告,以便向后兼容。

即使给定一个 C90 编译器,依赖现已过时的 "implicit int" 规则也没有任何优势。只需添加 #include <stdlib.h>。更一般地说,对于您调用的 任何 库函数,请阅读其文档和 #include 声明它的 header。

至于为什么您的一个程序出错而不是另一个程序出错,我无法解释。也许您使用不同的设置调用了编译器。在任何情况下,这都无关紧要——尽管您可能会研究如何配置您的编译器,以便它 总是 警告此类事情,因此您可以避免此类错误。