Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中通过nvim执行程序时,不调用getchar()_C_Vim_User Input_Neovim - Fatal编程技术网

在C中通过nvim执行程序时,不调用getchar()

在C中通过nvim执行程序时,不调用getchar(),c,vim,user-input,neovim,C,Vim,User Input,Neovim,我是一个C程序员新手,目前正在根据书籍设计简单的程序,以获得更多的知识。 现在,我正在学习“C编程语言”(Brian Kernighan,Dennis Ritchie),我正在进入讨论输入/输出编程的部分 以下是我正在尝试运行的代码(几乎与K&R完全相同): 直接在nvim中键入命令,无需任何替代: :gcc -Wall inputoutput.c -o inputoutput && ./inputoutput 给我和以前一样的输出 但是,当我在nvim之外执行编译后的程序时,

我是一个C程序员新手,目前正在根据书籍设计简单的程序,以获得更多的知识。 现在,我正在学习“C编程语言”(Brian Kernighan,Dennis Ritchie),我正在进入讨论输入/输出编程的部分

以下是我正在尝试运行的代码(几乎与K&R完全相同):

直接在nvim中键入命令,无需任何替代:

:gcc -Wall inputoutput.c -o inputoutput && ./inputoutput
给我和以前一样的输出

但是,当我在nvim之外执行编译后的程序时,我得到了预期的行为:

nxr: ~/scratch/c - ./inputouput
Input character:
a
a
** <CTRL-d> **
End of code

nxr: ~/scratch/c -
nxr:~/scratch/c-./inputuput
输入字符:
A.
A.
**  **
代码结束
nxr:~/scratch/c-
我的问题是:

  • 当我尝试运行代码时,为什么nvim内部和外部的行为不同?
  • 在nvim中运行程序时,为了获得预期的行为,我应该在C代码或nvim宏中更改什么?

  • 在gvim中,:!gcc-Wall inputoutput.c-o inputoutput&./inputoutput 适用于我并在下屏幕中运行程序

    不确定nnoremap正在做什么,但必须引入一些控制字符。我通常不会像那样使用编辑器重拍。建议编写一个Makefile并运行它

  • 如前所述,Neovim-bang角色引入了EOF

  • 换衣服!在宏中使用“te”


  • 大概,当它失败时,您将在第一次调用时从
    getchar()
    获得EOF。此时可能需要中断feof(stdin),以查看是否获得EOF(例如,因为输入来自
    /dev/null
    )或某些错误。循环之后,在
    printf()
    之前:
    if(feof(stdin))printf(“EOF\n”);else printf(“错误\n”)
    @JonathanLeffler在应用了第一条评论中描述的更改后,我得到了EOF输出(不是错误输出)。对于“foo”,似乎出于某种原因,您的输入来自
    /dev/null
    或等效文件,或其他一些空文件。古怪的我需要考虑一下。你可能是在Linux上吗?(我发现了
    %谢谢Jonathan。我在Linux上。我会在我的vim配置文件上进行更改,以反映首选的形式。我不应该更改任何东西,但无论如何都不会造成伤害。我想知道
    nvim
    的意义是什么。这不太可能是您遇到问题的原因。我正在尝试想出一种简单的方法来检测标准输入实际上是
    /dev/null
    或其他东西。这可以通过
    fstat()
    函数调用加上解析它返回的内容(以及
    stat()
    调用)来完成,但与我之前的建议不同,这并不是一件小事。这不是火箭科学,但也不是小事。你看到的是意想不到的——但不是你正在运行的C代码的错误。不知何故,这与
    nvim
    有关。如果你键入
    :!%:r
    ,然后返回会发生什么?我直接在nvim中键入了命令(即不使用nnoremap的快捷方式),但我仍然无法获得任何用户输入。一些额外的信息,我正在运行nvim v0.2.0。我最终可以编写一个Makefile并使其工作。我也可以直接在nvim外部编译。但为了方便起见,我想找到一种方法使其工作。这不是一个答案,而是一个注释。实际上这是一个很接近的原因:“无法复制”
    :!gcc -Wall inputoutput.c -o inputoutput && ./inputoutput
    
    Input character:
    End of code
    
    :gcc -Wall inputoutput.c -o inputoutput && ./inputoutput
    
    nxr: ~/scratch/c - ./inputouput
    Input character:
    a
    a
    ** <CTRL-d> **
    End of code
    
    nxr: ~/scratch/c -