我需要在我的编程课上写很多课程演示文稿,而且我经常需要显示源代码(主要是C代码).

我找不到一个简单的方法:
我用来做的是如果代码很小的快照,或者如果它太大则停止演示并在数据池中打开Kate.
在另一个问题中,有人建议嵌入HTML代码.所以我安装了QSource-Highlight,可以轻松地将C代码转换为HTML(也包括gnu source-highlight,code2html等).他们都不能将源代码转换为突出显示的RTF(富文本格式)的版本,这将是另一种方式.
拥有HTML没有帮助,因为我找不到一种简单的方法将HTML插入到演示文稿中.这个网站表现出非常招窗口的解决方案.它需要使用特定的Windows程序将c代码转换为HTML,该程序可以选择将HTML复制为RTF,之后您需要通过Word或Wordpad中的RTF,之后您将特殊的RTF转换为PowerPoint.一切都很好,但我是一个Linux用户,我认为可能有更好的方法.
此外,还有另一种可能的解决方案,将openoo扩展安装到openoffice.我不知道为什么,但尝试在我的系统中安装此扩展程序会给我一个错误.Synaptic告诉我,openoffice.org-core和许多其他应该被标记.我点击下一步,它告诉我它想要删除所有的包,并且该coooder需要这个包才能工作,所以它不会被安装.好...
我使用的是Linux UBUNTU 10.04和Open Office 3.2
谢谢!贝乔.
PS.:这个问题在meta中进行了辩论,因此可能重复上述问题.但我的理解是,旧问题并没有解决这个具体问题.
PPS:关于coooder bug,我在这里发布了一个错误报告
编辑(2015-08-19)
要插入RTF文本呈现的LibreOffice,您可以使用菜单insert,file和rtf(或HTML).
有人可以向我解释为什么以下代码在没有警告或错误的情况下编译?
我希望编译器警告我函数测试不要求任何参数.
但代码递归编译并运行函数测试.
static void has_args(int a, int b, int c) {
printf("has_args\n");
}
static void no_args() {
printf("no_args\n");
no_args(1, 2, 3);
}
void main() {
no_args();
}
Run Code Online (Sandbox Code Playgroud) 如何在Windows下使用普通c在控制台窗口中检查ymax和xmax?
这段代码用于linux:
#include <stdio.h>
#include <sys/ioctl.h>
int main (void)
{
struct winsize max;
ioctl(0, TIOCGWINSZ , &max);
printf ("lines %d\n", max.ws_row);
printf ("columns %d\n", max.ws_col);
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何为Windows做同样的事情.我试过winioctl.h但它没有定义struct winsize任何其他类似的名称.
有小费吗?谢谢.
PS.在linux中,您还可以使用找到控制台大小getenv("LINES");.Windows下有类似的变量吗?
PPS.此外,总有一种情况ncurses.h,我认为这两种系统都可以工作,但是由于与我所拥有的其他库的冲突,我正在避免它.
购买力平价.这个问题在这里得到C的终端宽度?有很多提示,所以不需要重复.
我有一个Joomla 3.3.6(编辑:) 3.5.网站只有3个级别:
该URL设置后Search Engine Friendly URLs,Use URL rewriting,Adds Suffix to URL和multilanguage support,应该是如下形式:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
但是,自从Joomla-Baby-Version以来,有许多其他人安装了Joomla并要求解决方案,我得到了:
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
其中666是来自地狱的数字,表示没有目的的类别ID
现在浏览一个答案,我找到了这个答案:
Edit “components/com_content/router.php“
(You’ll probably have to re-do this step every time you update Joomla.)
Replace the lines 38 and 290 with:
$advanced = $params->get('sef_advanced_link', 1);
and Replace line 426 with
->where($db->quoteName(‘alias’) . ‘ = ‘ . $db->quote($segment));
Run Code Online (Sandbox Code Playgroud)
嗯,首先,第426行已经像原来那样了.其次,这不是诀窍.它适用于:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
但如果您浏览到以下内容,则会出现404错误: …
1)C语言的最新版本是什么?2)GCC如何遵守它?3)对于一位老C程序员来说,新语言的主要区别是什么?
我问这个是因为我学习了这些日子(一个新功能),我们实际上可以将值归属于结构,如:
struct t
{
int i;
char c;
} s;
s = (struct t){exponent, coefficient};
Run Code Online (Sandbox Code Playgroud)
所以我想知道编程时我可能会遗漏的其他事情......
谢谢,Beco
我有两个结构,其值应该计算一个沉重的平均值,就像这个简化版本:
typedef struct
{
int v_move, v_read, v_suck, v_flush, v_nop, v_call;
} values;
typedef struct
{
int qtt_move, qtt_read, qtt_suck, qtd_flush, qtd_nop, qtt_call;
} quantities;
Run Code Online (Sandbox Code Playgroud)
然后我用它们来计算:
average = v_move*qtt_move + v_read*qtt_read + v_suck*qtt_suck + v_flush*qtd_flush + v_nop*qtd_nop + v_call*qtt_call;
Run Code Online (Sandbox Code Playgroud)
现在和他们一起我需要包含另一个变量.现在,例如,我需要包括v_clean和qtt_clean.我无法将结构更改为数组:
typedef struct
{
int v[6];
} values;
typedef struct
{
int qtt[6];
} quantities;
Run Code Online (Sandbox Code Playgroud)
这将简化我的工作,但它们是需要变量名称清晰的API的一部分.
所以,我正在寻找一种方法来访问那些结构的成员,也许正在使用sizeof(),所以我可以将它们视为一个数组,但仍然保持API不可更改.保证所有值都是int,但我不能保证一个的大小int.
在我脑海中写下这个问题......能union做到这一点吗?还有另一种聪明的方法可以自动化添加其他成员的任务吗?
谢谢,Beco
在Unix中,当exec
如果Real用户ID与文件所有者不同,并且Set user ID位为on,则有效用户ID将更改为文件所有者,并且也会保存设置的用户ID.
因为exec时将有效用户ID复制到已保存的设置用户ID.
此时,为什么需要保存set userID?
因为安全问题?如果是对的,尤其是什么情况?
当我教C时,有时候我依靠GCC去做一些规则的"令人信服"的部分.例如,不应该考虑函数上的局部变量保留调用之间的值.
海湾合作委员会总是帮助我向学生讲授这些课程,把垃圾放在地方变量上,这样他们就能理解正在发生的事情.
现在,这段代码肯定让我很难过.
#include <stdio.h>
int test(int x)
{
int y;
if(!x)
y=0;
y++;
printf("(y=%d, ", y);
return y;
}
int main(void)
{
int a, i;
for(i=0; i<5; i++)
{
a=test(i);
printf("a=%d), ", a);
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
(y=1, a=1), (y=2, a=2), (y=3, a=3), (y=4, a=4), (y=5, a=5),
Run Code Online (Sandbox Code Playgroud)
但如果我评论这条线:
/* printf("(y=%d, ", y); */
Run Code Online (Sandbox Code Playgroud)
然后输出变为:
a=1), a=32720), a=32721), a=32722), a=32723),
Run Code Online (Sandbox Code Playgroud)
我使用-Wallswitch 编译代码,但没有警告与使用局部变量相关而不初始化它们.
是否有任何GCC开关引起警告,或者至少明确显示一些垃圾?我尝试了优化开关,这有助于代码输出变成这样:
$ gcc test.c -o test -Wall -Os
$ ./test
(y=1, a=1), (y=1, a=1), …Run Code Online (Sandbox Code Playgroud) 这段代码对我的品味有点奇怪.拜托,有人在乎解释原因吗?以及如何强制'\n'被解释为一个特殊的字符?
beco@raposa:~/tmp/user/foo/bar$ ./interpretastring.x "2nd\nstr"
1st
str
2nd\nstr
beco@raposa:~/tmp/user/foo/bar$ cat interpretastring.c
#include <stdio.h>
int main(int argc, char **argv)
{
char *s="1st\nstr";
printf("%s\n", s);
printf("%s\n", argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
底线,意图是第二个字符串要打印成两行,就像第一行一样.这个程序是一个简化.真正的程序在使用文件读取时遇到了问题fgets(不是argv像这里那样的SO参数),但我认为在这里求解也会解决问题.