You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Neovim运行C++程序时无法获取输入的问题求助

解决Neovim运行C++程序无法获取输入的问题

你的问题出在当前运行程序的方式上::!%<.exe是在Neovim的非交互式外部命令环境中执行程序,程序无法接收你的输入,导致scanf读取失败,变量N是未初始化的垃圾值(这次刚好为0),所以直接输出0+250=250。

下面是几种可行的解决方法:

方法1:用内置终端缓冲区运行程序

修改你的<C-r>映射,让程序在Neovim内置终端里运行,这样就能直接在终端窗口输入内容:

nnoremap <C-r> :w <CR> :split | terminal %<.exe <CR>
  • 按下<C-r>后,会先保存文件,然后在下方拆分出一个终端窗口,程序会在里面运行,你可以直接在这个窗口输入数字,回车后就能得到正确输出。

方法2:在独立终端窗口运行程序

根据你的操作系统调整映射:

  • Windows系统(cmd):
    nnoremap <C-r> :w <CR> :!start cmd /k %<.exe <CR>
    
    按下<C-r>会弹出一个新的cmd窗口,程序在里面运行,你可以在窗口中输入内容。
  • Linux/macOS(以xterm为例,需先安装xterm):
    nnoremap <C-r> :w <CR> :!xterm -e %<.exe <CR>
    
    会弹出xterm窗口运行程序,支持输入交互。

方法3:调整外部命令的交互模式(兼容性较差)

Linux/macOS下可以尝试用stty恢复终端交互性,但这种方式可能在某些环境下失效:

nnoremap <C-r> :w <CR> :silent !stty sane; %<.exe <CR>

修改后的完整init.vim示例(以内置终端方法为例)

set nu
set tabstop=4 
set autoindent
set cindent
syntax on
nnoremap <C-b> :w <CR> :!g++ % -o %< -std=c++20 <CR>
nnoremap <C-r> :w <CR> :split | terminal %<.exe <CR>
call plug#begin()

Plug 'joshdick/onedark.vim'
Plug 'preservim/nerdtree'

call plug#end()
colorscheme onedark
nnoremap <C-n> :NERDTree <CR>
nnoremap <C-m> :NERDTreeClose <CR>

内容的提问来源于stack exchange,提问作者17 Yejun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:03:19