Запись входных ключей в файл

#c

#c

Вопрос:

Я компилирую этот код с помощью компилятора GNU GCC в блоках кода, но по какой-то причине файл журнала, который он создает, остается пустым, несмотря ни на что. Есть идеи, почему это может быть?

 #include <iostream>
#include <windows.h>
#include <string>
#include <fstream>

using namespace std;

int i;
string s;

int main()
{
    ofstream log;
    log.open("log.txt");
    while (!GetAsyncKeyState(VK_F8)) {
        for (i=65; i<90; i  ) {
            if (GetAsyncKeyState(i)) {
                s =i;
            }
            Sleep(10);
        }

        if (GetAsyncKeyState(VK_SPACE)) {
            s =" ";
        }
    }

    log << s;
    log.close();
    cin.get();
}
  

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

1. Что именно вы ожидаете s =i; сделать, учитывая, что s это строка и i является int ?

2. Вы пробовали просто выводить что- то в журнал? Например, просто для тестирования log << "TEST"; где-нибудь.

3. В файл ничего не записывается, даже если я включаю что-то вроде log<<«TEST»

4. Вы ищете log.txt файл в нужном каталоге ?

5. @Atmocreations: вы правы — похоже, он использует неявное преобразование из int в char . Основываясь на его более поздних комментариях, проблема в любом случае лежит совсем в другом месте (поскольку even log<<"TEST" не работает).

Ответ №1:

Рассмотрим следующие моменты:


Вы пытаетесь log << "TEST" выполнить условие?

Попробуйте это (сразу после log.open вызова):

 log.open("log.txt");
log << "TEST" << endl;
  

Если TEST записывается в файл, ваш файл пуст, потому что условие никогда не выполняется.


Другой проблемой может быть то, что файл содержит не отображаемые символы. Дамп вашего файла в шестнадцатеричном редакторе. Имеет ли файл размер 0 или содержит ли он данные, которые вы, возможно, не сможете отобразить в обычных текстовых редакторах?


* РЕДАКТИРОВАТЬ: * Это должно делать то, что вы хотите:

Либо напишите свой i or " " напрямую log , либо используйте stringstream:

 #include <sstream>

//...

ofstream log;
log.open("log.txt");
stringstream str;
while (!GetAsyncKeyState(VK_F8)) {
    for (i=65; i<90; i  ) {
        if (GetAsyncKeyState(i)) {
            str << i;
        }
        Sleep(10);
    }

    if (GetAsyncKeyState(VK_SPACE)) {
        str << " ";
    }
}

log << str.rdbuf();
log.close();
cin.get();
  

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

1. Если я протестирую его с помощью log << «TEST» << endl; он работает в любом месте файла, даже в if, которые активируются при нажатии клавиши. Единственная проблема сейчас заключается в том, что он не будет записывать int i в файл. И это как раз то, что я хочу знать, значение нажатой клавиши

2. @HenningJoubert: я изменил ответ и добавил возможное решение

Ответ №2:

Попробуйте использовать if(GetKeyState(0x41)) вместо этого для вашего if .

Ответ №3:

Скорее всего, вы ищете log.txt в неправильном каталоге