目前,我正在尝试用Visual Studio代码编写C/C++程序。为此,我安装了两个扩展:C/C++和C++ Intellisense
根据文档,调试工具不适用于windows。我已经能够构建和运行代码,执行以下任务:
{
"version": "0.1.0",
"command": "cmd",
"isShellCommand": true,
"args": [
"/C"
],
"tasks": [
{
"taskName": "Makefile",
"suppressTaskName": true,
// Make this the default build command.
"isBuildCommand": true,
// Show the output window only if unrecognized errors occur.
"showOutput": "always",
// No args
"args": [
"C:/Programs/cygwin/bin/make.exe",
"all"
],
// Use the standard less compilation problem matcher.
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"taskName": "Run",
"suppressTaskName": true,
"isTestCommand": true,
"args": [
"helloworld"
]
}
]
}
字符串
一个简单的Makefile
:
all: clean helloworld
helloworld: helloworld.cpp
C:/Programs/cygwin/bin/g++ helloworld.cpp -o helloworld
clean:
C:/Programs/cygwin/bin/rm -rf helloworld
型
但是,问题出现了,当程序在运行时需要一些用户输入时。假设对于这个非常熟悉的helloworld
程序。
# include <iostream>
using namespace std;
int main ()
{
int name;
cin >> name;
cout << "Hello, " << name << "!!!" << endl;
return 0;
}
型
你能帮我在运行时获取用户输入吗?有一个解决方案可以将输入作为命令行参数传递。但是,对于具有复杂流程的程序来说,这是不可能的。
7条答案
按热度按时间v440hwme1#
转到
Code -> Preferences -> Settings
并添加自定义设置:字符串
最后运行你的c++代码,你将能够在控制台中输入值
fslejnso2#
转到设置(code-runner+,)->搜索设置->:Code-runner:在终端中运行-选中此选项,您将能够直接在接受输入的终端中运行代码。
xpcnnkqh3#
确保你的VS代码中安装了代码运行器。
从顶部选择:文件>首选项>设置
在设置中搜索代码运行器并选中该框:
的数据
默认情况下,它保持未选中状态。您必须启用它才能在终端中运行您的首选语言。
mdfafbf14#
作为一个额外的便利,您还可以从注解向集成终端提供输入。
范例:
字符串
延伸链接--
注解输入:https://marketplace.visualstudio.com/items?itemName=virresh.cinp
注意事项:这个扩展依赖于code-runner,另一个可以运行几乎所有语言的脚本的扩展(你也可以指定自定义构建选项)
免责声明:我是这个扩展的作者
eblbsuwk5#
进入“设置”,搜索“代码运行器:运行在终端”,并检查它。这就是我如何修复它。
tjrkku2a6#
唉。几乎这里的每一个答案都是关于Code Runner扩展的,这篇问题帖子非常清楚地说明它使用的是C/C++扩展而不是Code Runner,老实说,自从
ms-vscode.cpptools
扩展添加了自己的运行按钮并支持调试以来,Code Runner在我眼中没有多大价值。如果你不知道我说的“任务”或“启动配置”是什么意思,我建议你先看看the docs on tasks,启动配置文件和the docs for configuring C++ debugging。
如果您使用的是macOS
我认为你需要使用
cppdbg
启动配置,如果你使用"request": "launch"
,或者使用附件("request": "attach"
),则将其externalConsole
属性设置为true
。请参阅该属性文档的以下片段:当设置为
false
时,输出可以在VS Code的debugConsole中看到。由于lldb-mi的限制,integratedTerminal支持不可用。我认为通过调试控制台不支持写入程序的标准输入。
Windows或Linux
(免责声明:我已经在Linux上测试过这些信息,但没有在Windows上测试过。欢迎反馈。如果我有时间和动力,也许我也会在Windows上测试)
如果您没有配置构建任务或启动配置
然后单击运行/调试按钮(它的形状像一个播放按钮,并有一个可在“运行C/C文件”或“运行C/C”文件之间切换的菜单),这是C/C扩展在工作台右上角的操作按钮条中提供的(如果您在命令面板中运行
C/C++: Run C/C++ File
/C/C++: Debug C/C++ File
,效果相同)将提示您“选择调试配置”,在这一点上,它将提供一个内置/检测到的启动配置的列表,可以用于基本的调试目的,如:C/C:构建和调试活动文件(preLaunchTask:C/C++构建活动文件)
检测到的任务:(编译器:)
选择你想要使用的编译器。程序将运行(如果你选择使用调试器运行),并且将创建/使用两个integrated terminal示例-一个用于构建任务(“preLaunchTask”),名为“build active file”,另一个用于运行你的程序,名为“cppdbg:“。运行你的程序的终端是你可以为程序的标准输入流写东西的地方。
如果您配置了 default 构建任务,但没有启动配置
然后运行按钮和相应的命令将只使用该构建任务和适合它的通用启动配置。你很可能希望构建任务不硬编码特定的文件名,除非你希望运行按钮或相应的命令只运行/调试一个特定的文件,而不管当前关注/活动的文件是什么。
同样的情况也适用:检查终端面板。那里应该有一个终端示例在等着你。
如果使用启动配置
答案和上面的差不多。如果你有一个默认的构建任务,则使用该任务作为其
preLaunchTask
的第一个启动配置。如果没有默认的构建任务,或者默认的构建任务是在the user-level tasks.json file中定义的,则会提示你使用哪个启动配置。转到集成终端面板。那里有一个终端示例,您可以在其中写入正在运行的程序的标准输入-也就是说,除非:
"args": ["<", "input_file.in"]
),"externalConsole": true
放在你的启动配置中,在这种情况下,一个外部控制台将被启动。设置,我不确定这里是否使用。如果您使用的是CMake工具
同样的道理(它集成了C/C++扩展)。检查终端面板。您应该看到一个标题为“cppdbg:“的示例。如果您使用调试运行,您还可以使用
cmake.debugConfig
设置执行文件重定向和externalConsole
等操作。lfapxunr7#
如果你遇到同样的问题,我的integratedTerminal无法读取输入从用户如下挂起(env. windows 10)x1c 0d1x
我的解决方案是将cygwin的gdb和g ++替换为mingw 64。
然后输入/输出是正常的