• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Po użyciu Funkcji AllocConsole() [windows.h] nie działa cout, cin

Object Storage Arubacloud
0 głosów
402 wizyt
pytanie zadane 17 sierpnia 2018 w C i C++ przez Erichu Nowicjusz (230 p.)

Witam,

Pisząc program, który miał mi przypominać o wcześniej zapisanych wydarzeniach napotkałem taki problem:

Po użyciu funkcji AllocConsole() [windows.h] nie działają mi operacje związane z wejściem i wyjściem. (tzn. cout,cin,)

Oto kod:

#include <iostream>
#include<fstream>
#include "wydarzenia.h"
#include<windows.h>
#include<ctime>
#include<string>
#include<sstream>
#include<cstring>
#include<cstdio>

using namespace std;
string nazwa;
string data;
string godzina;
void sprawdz();
int main()


{
    FreeConsole();
    sprawdz();
        while(true){
    if(GetAsyncKeyState(VK_LCONTROL)==-32767)
    {
        AllocConsole();  //od tego miejsca program nie działa
    cout<<"Nazwa: ";
    getline(cin,nazwa);
    cout<<"Data: ";
    cin>>data;
    cout<<"Godzina: ";
    cin>>godzina;
    wydarzenie w1(nazwa,data,godzina);
    cout<<"Dodano Wydarzenie!";
    Sleep(3000);
    FreeConsole();
    }}
    return 0;
}
void sprawdz()
{
    int dzien,mies,rok;
time_t now =time(0);
tm *ltm=localtime(&now);
dzien=ltm->tm_mday;
mies=ltm->tm_mon+1;
rok=ltm->tm_year+1900;
ostringstream ss;
if(dzien<10){ss<<"0"<<dzien<<".";}
else {ss<<dzien<<".";}
if(mies<10){ss<<"0"<<mies<<".";}
else{ss<<mies<<".";}
ss<<rok;
string data=ss.str();
fstream plik;
plik.open("log.txt",ios::in);
string linia,dataz;
while(getline(plik,linia))
{
dataz=linia.substr(0,10);
cout<<data<<" "<<dataz<<endl;
if(strcmp(data.c_str(), dataz.c_str())==0){MessageBox( NULL, linia.c_str(), "Przypomnienie", MB_ICONINFORMATION | MB_OKCANCEL );}

}

}

Pliku .h nie dołączam,bo nie w nim tkwi problem

Na innych forach znalazłem rozwiązanie z freeopen(), ale w moim przypadku to nie działa.

Z góry dziękuję za pomoc.

1 odpowiedź

0 głosów
odpowiedź 18 sierpnia 2018 przez j23 Mędrzec (194,920 p.)

To chyba oczywiste, że strumienie cin i cout nie działają po stworzeniu nowej konsoli, przecież nowa konsola oznacza nowe uchwyty stdio. musiałbyś poszukać jakiejś niestandardowej funkcji, która pozwala ustawić nowe uchwyty dla strumieni C.

 

Zawsze możesz zaimplementować własną wersję std::streambuf, którą podepniesz pod cin i cout.

Podobne pytania

0 głosów
1 odpowiedź 2,598 wizyt
pytanie zadane 25 października 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 1 czerwca 2019 w C i C++ przez Karol Bychowski Nowicjusz (140 p.)
0 głosów
1 odpowiedź 744 wizyt
pytanie zadane 13 marca 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

92,563 zapytań

141,413 odpowiedzi

319,591 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...