fprintf не будет работать с оператором switch / case в C ++ - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть простая программа на C ++ для хранения нажатых клавиш в файле.prinf работает для отображения в консоли, но fprintf для сохранения в файл не работает.Даже fprintf(logx, "TEST"); работает только когда я удаляю во время цикла.

Мой код:

int main(){
char c;
FILE *logx;

logx = fopen("mylog2.txt", "w");
fprintf(logx, "TEST");

while (true)
    {
    Sleep(10);
        for (int i = 8; i <= 255; i++)
        {
            if (GetAsyncKeyState(i) == -32767)
            {
                switch(i) {
                case 96:
                    fprintf(logx, "%d", 0);
                    break;
                case 97:
                    fprintf(logx, "%d", 1);
                    break;
                case 98:
                    fprintf(logx, "%d", 2);
                    break;
                case 99:
                    fprintf(logx, "%d", 3);
                    break;
                case 100:
                    fprintf(logx, "%d", 4);
                    break;
                case 101:
                    printf("%d", 5);
                    break;
                case 102:
                    printf("%d", 6);
                    break;
                case 103:
                    printf("%d", 7);
                    break;
                case 104:
                    printf("%d", 8);
                    break;
                case 105:
                    printf("%d", 9);
                    break;
                default:
                    c = char(i);
                    printf("%c", c);
                    break;
                }
            }
        }
    }

    return 0;
}

Файл пуст после нажатия всех возможных чисел.Даже файл TEST не записывается в файл (при удалении цикла выводится «TEST»).

1 Ответ

0 голосов
/ 09 февраля 2019

Вы должны как-то завершить цикл.Если вы завершите свою программу с помощью Ctrl-C, буферы FILE ввода-вывода не будут сброшены, а ваш файл будет пустым.

В качестве альтернативы вы можете поставить fflush(logx); после каждого отдельного оператора fprintf() дляпринудительно вывести данные в файл.Но это только последнее средство, так как ввод-вывод файлов очень медленный.

Вы также должны закрыть файл после цикла:

fclose(logx);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...