0

我想在 emacs 中使用 powershell,但似乎 emacs 中的 powershell 是块缓冲的。例如,当我像这样编写一个简单的 c 程序时:

int main()
{
 printf("input the number of a value: \n");
 scanf("%d", &num);
}

我编译它并使其在 emacs 下的 Powershell 中运行。input the number of a value:在我输入一个数字并点击之前,它不会打印出该行Enter。c 程序在 emacs 之外的 powershell 中运行良好。我的问题是如何运行缓冲在 emacs 中的 PowerShell 行?

编辑我使用Powershell.el

4

3 回答 3

1

如果您的程序连接到终端stdout,则 C 库的 是行缓冲的。stdout您在原始程序中发现该行为(没有fflush)的原因仅仅是因为在通过 GNU EMACS 运行时,您的程序认为它没有连接到真正的终端。例如,尝试在M-x term或中运行您的程序M-x ansi-term。此处给出的解决方案建议您使用fflush,这绝对不是解决方案,因为您不会更改系统中使用 C 库的每个小程序。所以你的问题的答案是真的给你的 GNU EMACS 一个真正的终端,而不是改变你的程序。现在,坏消息是这些 GNU EMACS 终端似乎都不能在 Windows 上运行。(对不起。)(尽管如此,似乎有人声称可以ansi-term在 Windows上运行。)

于 2018-04-20T12:35:53.150 回答
0

这对我有用eshell

#include <stdio.h>

int main() {
  int num;
  printf("input the number:\n");
  fflush(stdout);
  scanf("%d", &num);
  printf("inc: %d\n", num + 1);
}

我无法重现您的问题,powershell.el因为我看到了另一个问题:它不等待输入,而是“读取”0,打印“inc:1”并退出。

于 2012-10-24T14:04:51.973 回答
0

你需要fflushfscanf.

于 2012-10-20T15:42:31.607 回答