Если оператор не работает, ввод не распознан (C ++)

Моя программа работает без проблем, не компилирует ошибок.

Цель моего оператора if состоит в том, чтобы выбрать, будут ли буквы смещены влево / вправо, чего я пытался достичь с помощью оператора if, ведущего к 2 функциям, однако независимо от того, был ли введен cin >> z; он всегда будет использовать CipherR. Может кто-нибудь помочь мне понять это?

//Start of Document

#include <WinUser.h>                //Gives access to windows form library
#include "StdAfx.h" //Standard prefix for vb to save
#include <iostream> //Enables I/O stream cin/cout
#include <string>   //Ensures that string data can be assigned
#include <Windows.h>    //Gives access to windows library Included libraries, above <winuser.h>
using namespace std;

//Variables

char cipherR(char);
char cipherL(char);
int y;
const string LEFT = "1";
const string RIGHT = "0";//Main Code
int main()
{
string input;   //Declares string variable for temp storage

//MessageBox
int WinUserMessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT       uType);      //defines MessageBox parameters
const int message = MessageBox(NULL, L"Is your location    secure?", L"Warning", MB_YESNOCANCEL);       //sets up listener for messagebox   response

//Switch Response
switch (message)                                //Initialise case study
{
case IDYES:                                 //Runs this if Yes is selected

//cipher code block
do {
cout << "Enter text to be ciphered/deciphered." << endl;
cout << "Enter blank line to quit." << endl;
getline(cin, input);                            //Prompts for User   Input, stores into temporary var
string output = "";                             //Checks for blank input

cout << "Shift Left(1) or Right(0)? \n";
string z;               //L or R definer

std::cin >> z;
cout << "Enter number to shift\n";
cin >> y;
if (z == LEFT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherR(input[x]);
}
}                       //Adds the value of expression to the value of a variable and assigns the result to the variable.
else if (z == RIGHT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherL(input[x]);        //Adds the value of expression to the value of a variable and assigns the result to the variable.
}
};

cout << output << endl;         // If input is blank will end process
} while (!input.length() == 0);     //Loops while input.length is NOT equal to 0
break;

//alternate message responses
case IDNO:              //Runs this if No is selected
MessageBox(NULL, L"Agents are converging on your location now.", L"Run!", NULL);
return 0;
break;
case IDCANCEL:      //Runs this if cancel is selected
MessageBox(NULL, L"Why open this is you're gonna back out?", L"Alert", NULL);
return 0;
break;
}

}

//functions
char cipherR(char c)        //function caesar, called into main
{
if (isalpha(c))     //checks if is part of the alphabet
{
c = toupper(c);     //ignores casing of input for universal input
c = (((c - 65) + y) % 26) + 65;     //performs caesar cipher with algebraic equation
return c;                           //returns encrypted data
}
if (!isalpha(c))        //if is not alphabetic will make blank
{
return 0;           //returns blank
}
//  if c isn't alpha, just send it back

}

char cipherL(char c)        //function caesar, called into main
{
cout << "This Is left";
if (isalpha(c))     //checks if is part of the alphabet
{
c = toupper(c);     //ignores casing of input for universal input
c = (((c - 65) - y) % 26) + 65;     //performs caesar cipher with algebraic equation
return c;                           //returns encrypted data
}
if (!isalpha(c))        //if is not alphabetic will make blank
{
return 0;           //returns blank
}
//  if c isn't alpha, just send it back

}

//end of sheet

1

Решение

Я полагаю, у вас есть свои функции поменялись местами. В

if (z == LEFT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherR(input[x]);
}
}                       //Adds the value of expression to the value of a variable and assigns the result to the variable.
else if (z == RIGHT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherL(input[x]);        //Adds the value of expression to the value of a variable and assigns the result to the variable.
}
};

Когда вы идете в «левый» если заявление вы звоните cipherR() когда ты должен звонить cipherL(), Вы также должны исправить «правильно», как вы звоните cipherL(), Фиксированная версия:

if (z == LEFT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherL(input[x]);
//              ^ L here
}
}                       //Adds the value of expression to the value of a variable and assigns the result to the variable.
else if (z == RIGHT)
{
for (int x = 0; x < input.length(); x++)        // Loops until string.length is reached.
{
output += cipherR(input[x]);        //Adds the value of expression to the value of a variable and assigns the result to the variable.
//              ^ R here
}
};
0

Другие решения

Похоже, вы думаете -1 % 26 25
Это не так — это либо 1, либо -1, в зависимости от реализации.

В вашей реализации это очевидно положительно, так как вы получаете одинаковый результат для обеих смен.

Вы не можете использовать модуль для левого смещения.
Вместо этого используйте повторное добавление:

c = c - y;
while (c < 'A')
{
c += 26;
}

Вы также хотите посмотреть, какую функцию вы вызываете для каждого случая, так как вы переключили их.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector