什么是“sh:1:暂停:未找到”?

0 command-line programming c

我正在学习 C 作为第一编程语言。我输入了以下源代码:

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

int main()
{
    int a,s,d;

    printf("type the number which you want to add.\n\n");

    scanf("%d %d",&a,&s);
    d=a+s;
    printf("addition is %d\n\n\n",d);

    system("pause");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在 Windows 7 和 Ubuntu 中使用 Code::blocks 在 Code::blocks 中输入了相同的源代码,但在 Ubuntu 中,当我运行它时,最后它说

sh: 1: pause: not found
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Byt*_*der 9

system(...)C 中的函数将命令作为字符串(在 C 中是一个字符数组)并将其传递给操作系统的默认命令处理器/shell 以执行它。

在 Windows 上,这将由 完成cmd.exe,它有一个内部命令pause,可以打印诸如“按任意键继续...”之类的内容,并在退出之前等待键盘事件。

然而,Ubuntu 幸运的是没有cmd.exe,而是sh在这里使用它作为它的默认 shell(它是dash内部的),它没有pause命令。你可以使用这样的东西:

read -p 'Press Enter to continue...' var
Run Code Online (Sandbox Code Playgroud)

请参阅DOS 的暂停命令的 bash 等效项是什么?DOS 暂停等价的 Linux 是什么?(堆栈溢出)了解更多信息,但请注意 Csh在这里调用而不是bash.

因此,在您的 C 代码中,该行可以替换为:

system("read -p 'Press Enter to continue...' var");
Run Code Online (Sandbox Code Playgroud)

这将使您的程序只能在具有sh兼容 shell 的Linux 系统上运行,但它不再以这种形式在 Windows 上运行。

但是,请注意,system("pause");出于系统(“暂停”)中解释清楚的原因,通常不鼓励使用或类似(甚至独立于平台)的替代方案;- 为什么错了?