C用户输入无效(c,lua)

时间:2014-07-18 04:08:33

标签: c if-statement lua

我试图在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

1 个答案:

答案 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)

...等