小编che*_*mer的帖子

转置表是否会导致搜索不稳定

我正在写一个国际象棋引擎,最近添加了一个换位表.

在进行一些测试时,我发现尽管搜索仍然返回了相同的最佳移动,但移动的值(对于最大化玩家有多好)会波动.

这是换位表的正常行为吗?我记得读过换位表会导致搜索不稳定.这是什么意思?这是我的代码中的正常事件或严重错误吗?

c++ chess artificial-intelligence minimax

6
推荐指数
2
解决办法
995
查看次数

C printf无法按预期从终端工作

我尽可能地将问题减少到以下最小的代码片段.如果需要更多信息,请询问.

假设我有一个名为A的Java类,其主要方法是:

public static void main (String args[])throws Exception{
    Process p = new ProcessBuilder(args).redirectErrorStream(true).start();
    Scanner in = new Scanner(new InputStreamReader(p.getInputStream())); 
    System.out.println(in.nextLine());
}
Run Code Online (Sandbox Code Playgroud)

基本上,它从终端运行一个程序,从该程序读取一行,并回显它.非常简单.

现在我有第二个用c ++编写的程序,如下所示:

int main() 
{
    string s;
    cout << "example2 in c++"<<endl;;
    cin >> s;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我调用时:

java A pathToC++Program
Run Code Online (Sandbox Code Playgroud)

程序按预期运行,输出从cpp程序发送的字符串并终止.

我在c中有一个等效的程序:

int main()
{
   char s[10];
   printf("example1 in c\n");
   fgets(s,10,stdin); 
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我调用时:

java A pathToCprogram
Run Code Online (Sandbox Code Playgroud)

程序停止,没有打印出来.

当我从c程序中删除fgets行时,它看起来像这样:

int main()
{
   printf("example1 in c\n");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后Java程序能够识别该行并将其打印出来.因此,似乎fgets是有问题的线,但是当包含fgets时,即使它之前的线也不起作用.

这里发生了什么?

(我不知道这是Java还是C的特性,所以我包含了两个标签.)

c c++ java terminal command-line

2
推荐指数
2
解决办法
389
查看次数