effewf 2024-02-15 12:50 采纳率: 50%
浏览 10

vscode使用问题

问题描述

我想在 vs code 中实现:在本地编译时,从 test.in 的文件中读取数据,并输出正确结果。

  • 我已经在 c_cpp_properties.json 中进行了定义:
"defines": [
                // 省略
                "LOCAL"
            ]
  • 代码中也进行了定义:
#include <bits/stdc++.h>

using namespace std;

int a, b;

int main()
{
    #ifdef LOCAL
    freopen("test.in", "r", stdin);
    #endif

    cin >> a >> b;
    cout << a + b << endl;

    return 0;
}
  • test.in 中的数据也符合要求:
100 2

但是,当我编译代码时,依然要求我输入。例如,我输入 12,能输出正确结果 3
我又在 devcpp 中编译了代码(已添加预处理命令),不需要我输入,且输出了正确结果 102


希望各位能帮助我解决问题,感谢!

  • 写回答

3条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-02-15 12:51
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在 VSCode 中使用 freopen() 函数从指定文件读取输入时,问题可能出在编译和运行的配置上。对于 C++ 程序,默认情况下,VSCode 使用的终端可能并没有正确处理重定向。

    要解决这个问题,请按照以下步骤操作:

    1. 配置 launch.json 文件: 打开 .vscode 文件夹下的 launch.json(如果没有这个文件,可以通过点击顶部菜单栏 "Run" -> "Add Configuration..." 来创建)并添加或修改 "cppdbg" 启动配置,使其包含输入重定向。示例如下:
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) Launch",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/你的可执行文件名", // 替换为你的实际可执行文件路径
                "args": ["<", "test.in"], // 这里实现输入重定向,从 test.in 读取数据
                "cwd": "${workspaceFolder}",
                "externalConsole": true, // 如果希望在外部控制台显示结果,则设置为 true
                "MIMode": "gdb",
                "setupCommands": [...]
            }
        ]
    }
    
    1. 确保你的代码能够正确编译并在调试器中运行。现在当你按下 F5 或点击 "启动调试" 按钮时,程序应该会从 test.in 文件中读取输入。

    请注意,上述方法是通过调试器参数实现输入重定向,而非通过 freopen() 函数。在 VSCode 中,使用 freopen() 通常需要更复杂的集成终端配置,而通过调试器参数进行输入重定向更为直接和简单。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日