Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Virus Alert!

Ostatnio zmodyfikowano 2015-04-06 12:59
Autor Wiadomość
C-Objective
Temat założony przez niniejszego użytkownika
[c++] Virus Alert!
» 2015-04-02 14:15:35
Witam! Mam dręczącą sytuację od Kasperskiego, o tym kodzie, skompilowanym za pomocą mingw (binarki to niby jakiśtam generic cośtam), co więcej program nie działa (wpisanie "2 + 3" nie działa).
Kod:
C/C++
#include <iostream>
#include <fstream>
#include <string>

void olog( char * text );
void snln();
using namespace std;

void olog( char * text ) {
    cout << text;
    fstream log;
    log.open( "log.glog", ios::app );
    log << text;
    log.close();
}
void snln() {
    cout << endl;
    fstream log;
    log.open( "log.glog", ios::app );
    log << endl;
    log.close();
}

int main( int argc, char ** argv ) {
    int operation[ 2 ];
    char * znak;
    system( "CLS" );
    olog( "Calculator v 0.1 SNAPSHOT" );
    snln();
    olog( "by C-Objective." );
    snln();
    parse:
    olog( "MATH>> " );
    cin >> operation[ 0 ] >> znak >> operation[ 1 ];
    fstream log;
    log.open( "log.glog", ios::app );
    log << operation[ 0 ] << " " << znak << " " << operation[ 1 ] << " = ";
    log.close();
    if( znak == "+" ) {
        log << operation[ 0 ] + operation[ 1 ];
        cout << endl;
        cout << operation[ 0 ] + operation[ 1 ];
        log << endl;
    }
    else if( znak == "-" ) {
        log << operation[ 0 ] - operation[ 1 ];
        cout << endl;
        cout << operation[ 0 ] - operation[ 1 ];
        log << endl;
    }
    else if( znak == "*" ) {
        log << operation[ 0 ] * operation[ 1 ];
        cout << endl;
        cout << operation[ 0 ] * operation[ 1 ];
        log << endl;
    }
    else if( znak == "/" ) {
        log << operation[ 0 ] / operation[ 1 ];
        cout << endl;
        cout << operation[ 0 ] / operation[ 1 ];
        log << endl;
    }
    else {
        cout << "[number] [+ OR - OR * OR /] [number2]" << endl;
    }
    return 0;
}
P-129919
Fireho
» 2015-04-02 14:21:07
Nie rezerwujesz żadnej pamięci dla
char * znak
, a więc wskazuje on w jakieś losowe miejsce,
std::cin
 próbuje do tego losowego miejsca zapisać i masz błąd ochrony pamięci. Jeśli chcesz pobrać ciąg znaków, zamień go na statyczną tablicę lub przydziel pamięć za pomocą
new[]
. Jeśli chcesz pobrać jeden znak, zamień go na zwykły
char znak
.
P-129920
C-Objective
Temat założony przez niniejszego użytkownika
» 2015-04-02 14:29:49
long long argument = new long long;
Dobrze?
P-129921
RazzorFlame
» 2015-04-02 16:33:20
Ziom, skończ używać C-Stringów bo masz dużo lepsze stringi z C++.
P-129929
C-Objective
Temat założony przez niniejszego użytkownika
» 2015-04-02 16:57:15
Ale z C-Stringami jest troszkę lepiej bo można robić takie coś:
1.
C/C++
char * zmienna;
if( zmienna == "cośtam" ) cout << "OK!" << endl;

a takie coś:
C/C++
string zmienna;
if( zmienna == "cośtam" ) cout << "OK!" << endl;

wywala mi błąd.
2. Potrzebny jest nagłówek (#include <string>)
3.C Stringi narazie dla mnie są wygodniejsze
P-129931
RazzorFlame
» 2015-04-02 17:21:42
a takie coś:
C/C++
string zmienna;
if( zmienna == "cośtam" ) cout << "OK!" << endl;

wywala mi błąd.
Chyba żartujesz. Jaki błąd Ci wywala? Co z tego, że potrzeba nagłówka <string>?
P-129935
NopeDotAvi
» 2015-04-02 17:22:58
piszesz w c++, więc używaj
std::string
, nie rób z siebie samobójcy.
P-129936
michal11
» 2015-04-02 17:24:47
C/C++
char * zmienna;
if( zmienna == "cośtam" ) cout << "OK!" << endl;


Jeżeli myślisz, ze tak porównujesz c-stringi to jesteś w błędzie, od tego służy funckja strcmp().
P-129937
« 1 » 2 3
  Strona 1 z 3 Następna strona