没有走出循环

时间:2012-09-19 17:32:01

标签: c++ loops

我正在使用此程序来实现Mono字母密码。我得到的问题是当我输入纯文本时,当按下回车键满足条件时它不会离开循环。这是我的代码。

int main()
{
    system("cls");
    cout << "Enter the plain text you want to encrypt";
    k = 0;
    while(1)
    {
        ch = getche();
        if(ch == '\n')
        {

            break; // here is the problem program not getting out of the loop
        }
        for(i = 0; i < 26; i++)
        {
            if(arr[i] == ch)
            {
                ch = key[i];
            }
        }
        string[k] = ch;
        k++;
    }
    for(i = 0;i < k; i++)
    {
        cout << string[i];
    }
    getch();
    return 0;
}

3 个答案:

答案 0 :(得分:3)

这里的问题可能是getche()(与getchar()不同)只返回第一个字符,当有多个输入时,你就在窗口上(否则你不会使用{{ 1}})然后EOL用cls编码。

\r\n返回getche()会发生什么,所以你的休息时间永远不会被执行。您应该将其更改为\r,即使因为getche是非标准函数。

您甚至可以在您的情况下尝试查找getchar()而不是\r,但我想如果您需要稍后获取任何其他输入,\n将保留在缓冲区中会导致问题(不确定)。

答案 1 :(得分:2)

依赖于C ++中的旧C库是令人讨厌的。考虑这个替代方案:

#include <iostream>
#include <string>

using namespace std; // haters gonna hate

char transform(char c) // replace with whatever you have
{
    if (c >= 'a' && c <= 'z') return ((c - 'a') + 13) % 26 + 'a';
    else if (c >= 'A' && c <= 'Z') return ((c - 'A') + 13) % 26 + 'A';
    else return c;
}

int main()
{
    // system("cls"); // ideone doesn't like cls because it isnt windows
    string outstring = "";
    char ch;
    cout << "Enter the plain text you want to encrypt: ";
    while(1)
    {
        cin >> noskipws >> ch;
        if(ch == '\n' || !cin) break;
        cout << (int) ch << " ";
        outstring.append(1, transform(ch));
    }
    cout << outstring << endl;
    cin >> ch;
    return 0;
}

答案 2 :(得分:2)

我会做类似以下使用标准C ++ I / O的事情。

#include <iostream>
#include <string>

using namespace std;

// you will need to fill out this table.
char arr[] = {'Z', 'Y', 'X'};
char key[] = {'A', 'B', 'C'};

int main(int argc, _TCHAR* argv[])
{
    string sInput;
    char   sOutput[128];
    int k;

    cout << "\n\nEnter the plain text you want to encrypt\n";
    cin >> sInput;

    for (k = 0; k < sInput.length(); k++) {
        char ch = sInput[k];

        for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
        {
            if(arr[i] == ch)
            {
                ch = key[i];
                break;
            }
        }
        sOutput[k] = ch;
    }
    sOutput[k] = 0;
    cout << sOutput;

    cout << "\n\nPause.  Enter junk and press Enter to complete.\n";
    cin >> sOutput[0];

    return 0;
}