在 C 中通过 nvim 执行程序时不调用 getchar()
getchar() is not called when the program is executed via nvim in C
我是一个新手C程序员,目前正在根据书本设计简单的程序以获取更多知识。
现在,我正在学习 "The C Programming Language"(Brian Kernighan、Dennis Ritchie),我正在点击讨论 input/output 编程的部分。
这是我正在尝试使用的代码 运行(几乎与 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 code\n");
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 -
我的问题是:
- 为什么当我尝试 运行ning 代码时,nvim 内部和外部的行为不同?
- 当 运行在 nvim 中运行程序时,我应该在我的 C 代码或我的 nvim 宏中更改什么以获得预期的行为?
在 gvim 中,:!gcc -Wall inputoutput.c -o inputoutput && ./inputoutput
对我有用,并且 运行 是屏幕下方的程序。
不确定 nnoremap 在做什么,但肯定有一些控制字符被引入。我通常不使用那样的编辑器重映射。建议写一个 Makefile 只做 运行
Neovim bang 字符引入了一个 EOF,如解释的那样 here。
改变!在宏中 "te".
我是一个新手C程序员,目前正在根据书本设计简单的程序以获取更多知识。 现在,我正在学习 "The C Programming Language"(Brian Kernighan、Dennis Ritchie),我正在点击讨论 input/output 编程的部分。
这是我正在尝试使用的代码 运行(几乎与 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 code\n");
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 -
我的问题是:
- 为什么当我尝试 运行ning 代码时,nvim 内部和外部的行为不同?
- 当 运行在 nvim 中运行程序时,我应该在我的 C 代码或我的 nvim 宏中更改什么以获得预期的行为?
在 gvim 中,:!gcc -Wall inputoutput.c -o inputoutput && ./inputoutput 对我有用,并且 运行 是屏幕下方的程序。
不确定 nnoremap 在做什么,但肯定有一些控制字符被引入。我通常不使用那样的编辑器重映射。建议写一个 Makefile 只做 运行
Neovim bang 字符引入了一个 EOF,如解释的那样 here。
改变!在宏中 "te".