Помогите понять что неправильного в программе

#include<iostream>
 using namespace std; 
int main() 
{ 
int a; 
setlocale(0,""); 
cout<<"Что вывести ?"<<endl; 
cout<<"Нажми 1 чтобы вывести качественные реакции на определение Cl-, Br-, I- "<<endl; cout<<"Нажми 2 чтобы вывести качественные реакции на определение Fe2+ u Fe3+ "<<endl; cout<<"Нажми 3 чтобы вывести качественные реакции на определение F- "<<endl; 
cin>>a; 
   if(a<1,a>3)
 { 
cout<<"Введена некорректная цифра"<<endl; 
} 
   if(a=1)
 { 
cout<<"Для определения ионов Cl-, Br-, I- uспользуется один реактив AgNO3"<<endl; cout<<"Пример : "<<endl; 
cout<<"HCl + AgNO3 = AgCl↓ + HNO3"<<endl; cout<<"HBr + AgNO3 = AgBr↓ + HNO3"<<endl; cout<<"HI + AgNO3 = AgI↓ + HNO3"<<endl;
 } 
   if(a=2) 
{ 
cout<<"Качественными реакциями на определение Fe2+ u Fe3+ являются реакции с желтой кровяной солью и красной кровяной солью"<<endl; 
cout<<"Пример : "<<endl; cout<<"2К3[Fe(CN)6 ] + 3FeSO4 = KFe[Fe(CN)6])↓ + 3K2SO4 "<<" - "<< "красная кровяная соль"<<endl; cout<<"3К4[Fe(CN)6 ] + 4FeCl3 = KFe[Fe(CN)6])↓ + 12 KCl "<<" - "<<"желтая кровяная соль"<<endl;
 }
 }

Программа написана не до конца (нужно ещё написать условие для 3), но когда компилирую и проверяю : например ввожу 2, то программа показывает мне даже содержимое которое должно показываться только если я нажал на 1. Думаю то что проблема в типе данных который я использую. ХЗ. Помогите знатоки. Если что в логе пишет :
"
12 8 expression result unused
16 8 using the result of an assignment as a condition without parentheses
24 8 using the result of an assignment as a condition without parentheses

Парни, сам нашёл свою ошибку, забыл что одинарное = — знак присвоения. В итоге нужно поменять а = n на а == n.

А чем мешает ? А как сделать так чтобы при введении чисел кроме 1,2,3 она выдавала сообщение введена некорректная цифра ?

Так Croessmah тебе о том и толдычет. Условие у тебя неверно написано, почему ты запятую решил в него запихать непонятно. Два условия объединяются через логическое || ИЛИ. Если или первое выражение истина или второе. А почему switch не использовал?

код:

#include <windows.h>
#include <fstream>
#include <stdio.h>
using namespace std;

#include "main.h"
#include "Direct3D_Device\d3d9.h"


//Globals
ofstream ofile; 
char dlldir[320];
bool    CONSK_DebugMode = false;
HINSTANCE oHinstance;


bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved)
{
    if(dwReason == DLL_PROCESS_ATTACH)
    {
        oHinstance = hDll;
        DisableThreadLibraryCalls(hDll);

        GetModuleFileName(hDll, dlldir, 512);
        for(int i = strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i+1] = 0; break; } }
        ofile.open(GetDirectoryFile("CheatON.ru-StarerKit.Log"), ios::app);

        add_log("-------------------------------------------");
        add_log("-= CheatON.ru StarterKit: Cheat Started. =-");
        add_log("-------------------------------------------");
        HMODULE hMod = LoadLibrary("d3d9.dll");

        oDirect3DCreate9 = (tDirect3DCreate9)DetourFunc(
            (BYTE*)GetProcAddress(hMod, "Direct3DCreate9"),
            (BYTE*)hkDirect3DCreate9, 
            5);

        return true;
    }

    else if(dwReason == DLL_PROCESS_DETACH)
    {
        add_log("--------------------------------------------");
        add_log("-= CheatON.ru StarterKit: Cheat Shutdown. =-");
        add_log("--------------------------------------------");
        if(ofile) { ofile.close(); }
    }

    return false;
}

char *GetDirectoryFile(char *filename)
{
    static char path[320];
    strcpy_s(path, 320, dlldir);
    strcat_s(path, 320, filename);
    return path;
}

void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
    BYTE *jmp = (BYTE*)malloc(len+5);
    DWORD dwback;

    VirtualProtect(src, len, PAGE_READWRITE, &dwback);

    memcpy(jmp, src, len);  jmp += len;

    jmp[0] = 0xE9;
    *(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

    src[0] = 0xE9;
    *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

    VirtualProtect(src, len, dwback, &dwback);

    return (jmp-len);
}

bool RetourFunc(BYTE *src, BYTE *restore, const int len)
{
    DWORD dwback;

    if(!VirtualProtect(src, len, PAGE_READWRITE, &dwback))  { return false; }
    if(!memcpy(src, restore, len))                          { return false; }

    restore[0] = 0xE9;
    *(DWORD*)(restore+1) = (DWORD)(src - restore) - 5;

    if(!VirtualProtect(src, len, dwback, &dwback))          { return false; }

    return true;
}

void __cdecl add_log (const char *fmt, ...)
{
    if(ofile != NULL)
    {
        if(!fmt) { return; }

        va_list va_alist;
        char logbuf[256] = {0};

        va_start (va_alist, fmt);
        vsnprintf_s(logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), _TRUNCATE, fmt, va_alist);
        va_end (va_alist);

        ofile << logbuf << endl;
    }
}

shox, код не проверял, но видимо должно быть так:

void __cdecl add_log (const char *fmt, ...)
{
    if (ofile)    // поток открыт и поток не в состоянии ошибки, значит можно пользоваться
    {
        if (fmt == nullptr) { return; }  // если уж C++11, то лучше так

        va_list va_alist;
        char logbuf[256] = {0};

        va_start (va_alist, fmt);
        vsnprintf_s(logbuf, _countof(logbuf), _TRUNCATE, fmt, va_alist); // см. докуменитацию
        va_end (va_alist);

        ofile << logbuf << endl;
    }
}

Cranium, спасибо, ту ошибку решило, но выдаёт 9 неразрешенных символов, хотя в свойствах набор символов: «не задано».

Я не понимаю о каких символах и о каком наборе символов идёт речь.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.