您好我正在尝试使此代码正常工作
extern "C"
{
#include <lua.h>
#include "lualib.h"
#include "lauxlib.h"
}
#include "glew.h"
#define GLEW_STATIC
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>
////////////////////////
////////////////////////
test.h
void Test(void)
{
int status;
**//The Lua Interpreter**
lua_State *L = lua_open();
**//Open Lua Libarys**
luaL_openlibs(L);
**//Run Lua Script**
status = luaL_loadfile(L,"Test.lua");
printf( "actually getting to this point!");
getchar();
//Close Lua
lua_close(L);
}
Run Code Online (Sandbox Code Playgroud)
这个名字叫test.lua这是我的lua文件
print"Whats your name?"
function sleep(n)
end
Run Code Online (Sandbox Code Playgroud)
这不起作用:(
lual_dofile(L, "Test.lua");
孔程序编译,但然后不执行脚本或显示运行的lua脚本的任何视觉反馈有没有人遇到此问题之前?并且知道为什么?**
我的意思是这个问题与其他编程语言不同,我可以简单地谷歌"实现类似的接口java"或"图形绘制python",每当我谷歌一个C问题,似乎大多数结果是关于C#或C++
我试过说ANSI C或C99,但那不太成功.我把我的朋友在大学借给我的K&R C圣经,有没有哪些网站是明确的c源?
我正在学习C,在开始学习C++作为我的第一个编译语言后,我决定"回归基础"并学习C.
关于每种语言处理函数的方式,我有两个问题.
首先,为什么C"不关心"函数定义的范围,而C++呢?
例如,
int main()
{
donothing();
return 0;
}
void donothing() { }
Run Code Online (Sandbox Code Playgroud)
以上内容不会在C++编译器中编译,而是在C编译器中编译.为什么是这样?C++不仅仅是C的扩展,而且应该主要是"向后兼容"吗?
其次,我找到的书(链接到pdf)似乎没有说明主函数的返回类型.我查看并找到其他书籍和网站,这些也通常不指定主要功能的返回类型.如果我尝试编译一个没有为main指定返回类型的程序,它在C编译器中编译很好(尽管有一些警告),但它不能在C++编译器中编译.再说一次,为什么呢?是否更好的风格总是将返回类型指定为整数而不是将其遗漏?
感谢您提供任何帮助,并且只是作为旁注,如果有人可以推荐一本我应该购买的更好的书,那就太好了!
为了在C中练习我的编程技巧,我试图自己编写strncpy函数.这样做我总是遇到错误,解决了大部分错误,最终我没有进一步的灵感继续下去.
我收到的错误是:
ex2-1.c:29:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("The copied string is: %s.\n", stringb);
Run Code Online (Sandbox Code Playgroud)
问题是,这是一个非常常见的错误,并且它也已经在SO上描述,但我似乎无法应用其他人已经指出的提示.我知道在打印变量时我使用了错误的类型,当我使用%d格式时,它将返回一个整数,这可能是第一个字符的ASCII值,因为它在增加最大数字时不会改变要复制的字节数.
使用GDB我发现迭代通过while循环的b变量保持正确的字符串,但我似乎无法打印它.
我可能缺乏关于C语言的非常基本的知识部分而且我为这个新手问题(再一次)提出了道歉.如果您能提供反馈或指出我的代码中的其他缺陷,我将不胜感激.
#include <stdlib.h>
#include <stdio.h>
void strmycpy(char **a, char *b, int maxbytes) {
int i = 0;
char x = 0;
while(i!=maxbytes) {
x = a[0][i];
b[i] = x;
i++;
}
b[i] = 0;
}
int main (int argc, char **argv) {
int maxbytes = atoi(argv[2]);
//char stringa;
char stringb;
if (argc!=3 || …Run Code Online (Sandbox Code Playgroud) 关于第1章:Kernighan和Ritchie的教程介绍中的这段经文:C编程语言(我已经加粗了我需要澄清的具体部分,并在下面详细阐述):
给定getchar和putchar,您可以编写大量有用的代码,而无需了解有关输入和输出的更多信息.最简单的例子是一个程序,一次将其输入复制到输出一个字符:读取字符while(字符不是文件结束指示符)输出字符只读取读取字符将其转换为C给出:
#include <stdio.h>
/* copy input to output; 1st version */ main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
关系运算符!=表示"不等于".键盘或屏幕上似乎是一个字符,当然,就像其他一切一样,内部存储就像一个位模式.char类型专门用于存储此类字符数据,但可以使用任何整数类型.我们使用int是一个微妙但重要的原因.
问题是区分输入结束和有效数据.解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆.对于"文件结束",该值称为EOF.我们必须声明c是一个足够大的类型,以保存getchar返回的任何值.我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF.因此我们使用int.
我的理解是Char是一种Int,但它只是更小(与Int16,Int32,Int64在其他语言中相同,但可以表示数字的大小).
我知道每个字符都可以用Char类型的整数表示,那么为什么EOF值不能表示为Char?是因为Char类型中的每个整数都已被考虑,甚至还有一个数字对于数据类型而言太大了?
任何解释或更正我的知识将不胜感激.
我知道C语言中没有按引用调用。但是,有些人说C中有一个引用调用。我很困惑。
据我所知,当将因子交给C中的函数时,我知道传递给函数的值是通过制作本地副本作为参数来接收的。
然而,在C++中,“通过引用调用”是可能的,因为“仅因子和名称不同的相同元素”是通过引用“&”创建的。真的吗?
我正在阅读《K&R C 编程语言》,第 2.10 章中指出:
“如果 expr1 和 expr2 是表达式,那么
Run Code Online (Sandbox Code Playgroud)expr1 op= expr2相当于
Run Code Online (Sandbox Code Playgroud)expr1 = (expr1) op (expr2)除了 expr1 仅计算一次。”
op=指的是可以与赋值一起使用的二元运算符+=,-=例如 等(并且在第二行中 op 仅表示二元运算符,例如+)
我的第一个小困惑是它expr1必须只是一个变量(“左值”)?否则我们如何将结果分配给更大的表达式?expr1但我的主要问题是“仅计算一次”是什么意思?如果我们写:
expr1 = (expr1) op (expr2)
Run Code Online (Sandbox Code Playgroud)
代替
expr1 op= expr2
Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
int main()
{
int x = -2;
while (x++ || x==0)
{
printf("X");
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下
XX
为什么?
我期望这段代码进入无限循环,因为增量将使逻辑或的任一侧都为真。
当我完全键入它们时,K&R中的一些示例在Code:Blocks中不起作用.例如,这个程序:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
当我输入此代码并运行它时,程序要么冻结,要么在按Enter键时不执行任何操作.
下面的程序做同样的事情(计算一个字符串中的字符),它的工作原理.
#include <stdio.h>
int main()
{
char s[1000];
int i;
scanf("%s",s);
for(i=0; s[i]!='\0'; ++i);
printf("Length of string: %d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?自K&R第二版以来C是否已被更改或我做错了什么?