在C中通过nvim执行程序时,不调用getchar()
我是一个C程序员新手,目前正在根据书籍设计简单的程序,以获得更多的知识。 现在,我正在学习“C编程语言”(Brian Kernighan,Dennis Ritchie),我正在进入讨论输入/输出编程的部分 以下是我正在尝试运行的代码(几乎与K&R完全相同): 直接在nvim中键入命令,无需任何替代:在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之外执行编译后的程序时,
: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-
我的问题是:
在gvim中,:!gcc-Wall inputoutput.c-o inputoutput&./inputoutput 适用于我并在下屏幕中运行程序 不确定nnoremap正在做什么,但必须引入一些控制字符。我通常不会像那样使用编辑器重拍。建议编写一个Makefile并运行它
大概,当它失败时,您将在第一次调用时从
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 -