freopen() не выполняет чтение / запись в существующий файл, niether создает новый файл в vscode

#c #visual-studio-code #freopen

#c #visual-studio-code #freopen

Вопрос:

Я пытаюсь прочитать ввод и вывод из двух отдельных текстовых файлов на C .

Код (test.cpp ):

 #include<bits/stdc  .h>
using namespace std;
int main()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    #endif

    int x = 6 ;
    cin >> x;
    cout << x;
}
 

input.txt:

 1
 

output.txt пусто

В VS code при использовании терминала и записи команд :

g test.cpp

.a.exe

данные из входного текстового файла считываются, а данные записываются в выходной текстовый файл.

Результат после запуска

Но если я использую отладку, входные и выходные файлы не распознаются программой. Ввод и вывод не считываются / не записываются. Ошибка не отображается, и программа просто завершается.

Результат после использования отладки

запустите.json:

 {
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
    {
        "name": "g  .exe - Build and debug active file",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}\${fileBasenameNoExtension}.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin",
        "environment": [],
        "console": "externalTerminal",
        "MIMode": "gdb",
        "miDebuggerPath": "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\gdb.exe",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
        "preLaunchTask": "C/C  : g  .exe build active file"
    }
]
 

}

Я хочу, чтобы ввод / вывод из текстового файла также выполнялся во время отладки.

Комментарии:

1. Текущий рабочий каталог, «cwd», должен быть каталогом, содержащим ваши файлы.

Ответ №1:

Хорошо, я понимаю, что здесь происходит. В launch.json файле "cwd" значением является путь к текущему рабочему каталогу запускаемого или отлаживаемого процесса, из которого по умолчанию считываются входные файлы, а выходные файлы записываются и записываются.

Вы должны установить его в каталог, в котором находятся файлы, с которыми вы работаете.

Комментарии:

1. Я понял это после некоторой головной боли. Спасибо.