首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在windows-10的cygwin上读取java的EOF

在windows-10的cygwin上读取java的EOF
EN

Stack Overflow用户
提问于 2016-09-05 09:42:27
回答 1查看 490关注 0票数 2

我在cygwin上使用了java实用程序(antlr),java是windows版本,我从cygwin bash运行javac/java。

下面的java代码用于在win8.1上运行cygwin,读取stdin到EOF (改编自reading input till EOF in java)的一系列数字:

代码语言:javascript
运行
复制
import java.util.Scanner;
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World");
        Scanner in = new Scanner(System.in);
        int num;
        while (in.hasNextInt()) {
            num = in.nextInt();
            System.out.printf("%d\n",num);
        }
    }
}

最近,我买了一台新的win10笔记本电脑,安装在它上,现在已经不能工作了。当我按下Ctrl时,程序继续等待输入,它不会被视为EOF。

经过一些调试(请参阅what is EOF in cygwin in windows 10中的注释),"stty -a“报告"eof = ^D;susp = ^Z",因此Ctrl将被视为EOF。c++中的以下等效代码可以按预期工作,可能是因为该代码是用cygwin本身编译的,因此将^D视为EOF。

代码语言:javascript
运行
复制
#include <stdio.h>
int main() {
    int i=0, status;
    for(;;) {
      printf("Enter a value %d:\n", i);
      status = scanf("%d", &i);
      if(status!=1) break;
    }
}

所以,在cygwin 10的组合中,似乎有一些东西被打破了。有什么提示,什么可以被打破和如何修复它?

注意:我正在使用java jdk-7u72。

当使用cygwin时,我使用windows本身的java安装。下面是一些用法:

In cygwin: javac Hello.java;java

然后给出输入,然后是新行中的^D (即输入返回后立即)。

windows中的--我也尝试在windows中运行相同的程序,只是为了确定它是windows问题还是cygwin问题。所以这里我也运行: javac Hello.java;javac

然后给出输入,然后是新行中的^D (或^Z) (即输入返回后立即)。当我按^D或^Z键时,程序将正确终止。

EN

回答 1

Stack Overflow用户

发布于 2016-09-05 20:16:41

在非Cygwin Windows程序中,输入端的Ctrl会触发文件结束的情况.

在Cygwin程序中,在输入触发器和文件结束条件下使用Cygwin、Ctrl.(这可以用stty命令重新配置,但您还没有这样做。)

程序如何执行并不重要。重要的是它是如何建造的。

您正在运行的程序是java命令,它是一个非Cygwin可执行文件。( java命令恰好在运行您的Java程序。)由于java是一个非Cygwin程序,所以它将Ctrl作为文件结束字符.

据我所知,你所描述的所有行为都与此相符。

如果您想让Java程序像Cygwin程序一样运行,那么您必须使用为使用Cygwin而构建的Java系统。我不确定这是否可行,但这超出了这个问题的范围,所以我将把这个问题留给你和谷歌搜索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39327818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档