我是一名新手C程序员,目前正在根据书籍设计简单的程序以获得更多知识。 现在,我正在学习"C编程语言"(Brian Kernighan,Dennis Ritchie(,我正在讨论输入/输出编程的部分。
这是我尝试运行的代码(几乎完全复制自K&R(:
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char** argv)
{
int c;
printf("Input character:n");
while ((c = getchar()) != EOF){
putchar(c);
}
printf("End of coden");
return 0;
}
我使用nvim作为我的 IDE。我为编译设置了如下 nvim 快捷方式:
nnoremap <leader>cc :!gcc -Wall % -o %:r && ./%:r<CR>
现在回到代码。当我使用上面显示的快捷方式编译这个时,它工作得很好。代码编译。但是,我的程序在没有要求我输入任何输入的情况下结束(就像调用getchar((一样(:
:!gcc -Wall inputoutput.c -o inputoutput && ./inputoutput
Input character:
End of code
直接在 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 -
我的问题是:
- 为什么当我尝试运行代码时,nvim 内部和外部的行为不同?
- 在 nvim 中运行程序时,我应该在 C 代码或 nvim 宏中更改什么以获得预期的行为?
-
Neovim bang 角色引入了 EOF,如此处所述。
-
将宏中的 ! 更改为"te"。
在 gvim 中, :!gcc -Wall inputoutput.c -o inputoutput && ./inputoutput 为我工作并在下部屏幕运行程序。
不确定 nnoremap 在做什么,但必须引入一些控制字符。 我通常不会像那样使用编辑器重映射。 建议编写一个生成文件并运行