我在Linux(Ubuntu和CentOS)和Windows 7操作系统上用C语言编写了一个简单的加法程序,源代码相同,如下:
#include <stdio.h>
int main(){
int a,s,d;
printf("type the values u want to add and give tab between them\n");
scanf("%d %d",&a,&s);
d=a+s;
printf("addition is %d",d);
return 0;
system("read -p 'Press Enter to EXIT...' var");
}
在 Windows 中,当我双击 时,它会运行,addition.exe
但在 Ubuntu(也在 CentOS 中)中,当我单击可执行文件时addition
,没有任何反应。它不运行或打开终端。但是,当我./addition
在终端中输入时它会运行。
但我想通过双击来运行它。我应该怎么办?
该文件的属性如下图所示:
此外,在“打开属性”部分中也没有“在终端中打开”之类的选项。
我还尝试创建.desktop
文件,如下所示:
[Desktop Entry]
Name=addition
Type=Application
Exec=/media/smit/D/smits programs of c/projects by code blocks/02U/addition/bin/Debug/addition
Terminal=true
当我点击addition.desktop
然后它说启动应用程序时发生错误。
我还尝试通过将此桌面文件复制到/usr/share/applications
.
答案1
问题的核心是您正在尝试运行该程序,这是控制台应用程序,但是你没有连接终端。在终端中,您只需调用程序名称即可运行程序,但在 GUI 中,您需要明确指定应该出现一个终端窗口来运行控制台应用程序(对于基于 GNOME 的桌面尤其如此,例如 Ubuntu 的 Unity) 。
应该做的是,您还需要.desktop
为您的程序创建一个包含 4 个字段的文件。这是一个例子:
[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true
我不了解 CentOS,但就 Ubuntu 而言,要求.desktop
应用程序也必须可执行如果它们位于用户主目录下的任何目录中。.desktop
位于其他目录中的文件,例如/usr/share/applications
不需要的文件。
因此,一旦文件就位.desktop
并使其可执行,您就可以运行该程序。重要的一点是Terminal=true
线。这将告诉 GUI 启动终端并在那里运行您的程序。笔记:如果您的程序执行内容并立即退出,您将需要某种延迟或getchar();
调用以保持窗口打开,因为程序退出时终端窗口将退出。这就是为什么许多用户有时会感到困惑“为什么我的程序没有运行?”它运行,实际上,它退出得太快了。
补充笔记:
- 摆脱
system("read -p 'Press Enter to EXIT...' var");
。该read
调用是内置的 shell,并且是不是一个独立的程序,这意味着它只能在您使用 shell 时使用,例如bash
.如果您使用 C,请正确使用scanf()
或getchar()
来为您的程序添加延迟。它出现return 0;
在行之后,这意味着您的system()
行将不会到达(程序将在return
语句处退出),因此您为程序设置的暂停位置也是无效的。 - 读这个帖子在 AskUbuntu 上获取正确文件的示例,
.desktop
其中包含以下链接官方文档。 - 如果您感到懒惰并且不想
.desktop
为每个可执行文件创建文件,那么有很多解决方案这里。我什至还在那里发布了一个脚本。