我试图在c和lua中创建一个简单的calc应用程序。但由于某种原因,它基于输入来克服命令。我知道代码是没用的,也是不切实际的,但我正在学习使用lua(luaJIT),c api,所以请耐心等待。当我运行此代码时,它获取用户输入(即添加),但随后什么都不做,并跳到代码的末尾。但我把它放在一个无限循环中来阻止它,但它仍然在if语句中跳过代码。有想法该怎么解决这个吗?任何帮助表示赞赏。谢谢!
C代码:
int main()
{
fflush(stdin);
int status;
int trace = 1;
int x = 0;
lua_Number lua_tonumber (lua_State *L, int index);
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaJIT_setmode(L, trace,LUAJIT_MODE_ALLFUNC|LUAJIT_MODE_ON);
luaL_dofile(L,"fuel.lua");
while(x == 0){
printf("Enter a op (add, sub, multi, div)\n");
scanf("%s", a_word);
if(a_word == "add"){
lua_Number num1;
lua_Number num2;
printf("Enter the first number: ");
scanf("%s", num1);
printf("Enter the second number: ");
scanf("%s", num2);
lua_getglobal(L, "add");
lua_pushnumber(L, num1);
lua_pushnumber(L, num2);
lua_pcall(L,2,1,0);
int resut = lua_tonumber(L,-1);
printf("the number is %d\n", resut);
}
else if(a_word == "sub"){
lua_Number num1;
lua_Number num2;
printf("Enter the first number: ");
scanf("%d", num1);
printf("Enter the second number: ");
scanf("%d", num2);
lua_getglobal(L, "sub");
lua_pushnumber(L, num1);
lua_pushnumber(L, num2);
lua_pcall(L,2,1,0);
int resut = lua_tonumber(L,-1);
printf("the number is %d\n", resut);
}
else if(a_word == "multi"){
lua_Number num1;
lua_Number num2;
printf("Enter the first number: ");
scanf("%s", num1);
printf("Enter the second number: ");
scanf("%s", num2);
lua_getglobal(L, "mult");
lua_pushnumber(L, num1);
lua_pushnumber(L, num2);
lua_pcall(L,2,1,0);
int resut = lua_tonumber(L,-1);
printf("the number is %d\n", resut);
}
else if(a_word == "div"){
lua_Number num1;
lua_Number num2;
printf("Enter the first number: ");
scanf("%s", num1);
printf("Enter the second number: ");
scanf("%s", num2);
lua_getglobal(L, "divi");
lua_pushnumber(L, num1);
lua_pushnumber(L, num2);
lua_pcall(L,2,1,0);
int resut = lua_tonumber(L,-1);
printf("the number is %d\n", resut);
}
}
}
lua文件:
add = function(x,y)
return x+y
end
sub = function(x,y)
return x-y
end
mult = function(x,y)
return x*y
end
divi = function(x,y)
return x / y
end
答案 0 :(得分:1)
在c中,您使用strcmp比较'字符串'。
strcmp(first_char*, scnd_char*)
如果它们相等则返回0,如果第一个在字典上大于或小,则返回正值或负值。
更多阅读: http://en.cppreference.com/w/c/string/byte/strcmp
它适用于c ++,但也适用于此。
我相信你需要做的就是替换:
if(a_word == "add")
使用:
if(strcmp(a_word, "add) == 0)
...等