首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C字符串的GetLine函数不能正常工作

C字符串的GetLine函数不能正常工作
EN

Stack Overflow用户
提问于 2019-03-24 12:31:49
回答 1查看 446关注 0票数 0

我正在为我的计算机科学课做一个项目,不管是什么原因,一旦我的代码到达我的cin.getline代码,它就结束了,不允许我输入任何东西,我不知道为什么。我认为这个问题与c-string末尾的"null“字符有关,但我不太确定它是否工作正常,直到我添加了”确定是编码还是解码部分“和if语句。这段代码还没有完全完成,我只需要修复导致这一切继续下去的原因。

因此,本质上,它不需要上面的整个部分和if语句就可以工作。但是一旦我添加了这些,我的cin.getline函数就不起作用了。但是,如果我使用cin >>行,它甚至可以与上面的代码一起工作。我需要getline函数,因为我将把它写到一个文件中,而且我还需要抓取那些性感的空间‘’。

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <string>
#include <ctime>
#include <fstream>
using namespace std;

//Function Prototypes:
string fileAddress(string);
void swap(char &, char &);
string code(int, char [], char [], char []);

//Main Function:
int main()
{
        //Alphabet Section:
    //------------------------------------------------------------------------------------------------------------------
        //Declaring Variables Relating to Alphabet:
        int size = 29;
        char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ., ";
        char sAlphabet[size];
        int x;
        int y;

        //Copying Alphabet & Outputting Test Value:
        strcpy(sAlphabet, alphabet);

        //Scrambling Alphabet
        unsigned seed = time(0);
        srand(seed);

        for(int i = 0; i < 10000; i++)
        {
            //Initializing Random Numbers to Swap:
            x = rand()%29;
            y = rand()%29;

            //Swapping Values
            swap(sAlphabet[x], sAlphabet[y]);
        }

        //Testing Scrambled Alphabet:
        cout << sAlphabet << endl << endl;
    //------------------------------------------------------------------------------------------------------------------


        //Determining Whether to CODE or DECODE Section:
    //------------------------------------------------------------------------------------------------------------------
        //Response Variables:
        string response;

        //Gathering Choice From User:
        cout << "If you wish to code a message, please type CODE." << endl;
        cout << "If you wish to decode a message, please type DECODE.";
        cin >> response;
    //------------------------------------------------------------------------------------------------------------------


        //Writing Coded Message to File Section:
    //------------------------------------------------------------------------------------------------------------------
        if(response == "CODE")
        {
            //Code Variables:
            int length = 100;
            char line[length];
            char cline[length];
            string codedLine;

            //Gathering Line from User:
            cout << "Please enter a message in all CAPS that you wish to code.";
            cin.getline(line, length);

            //Copying Line:
            strcpy(cline, line);

            //Gathering length of Line:
            length = strlen(line);

            codedLine = code(length, line, cline, sAlphabet);
            cout << line << endl;
            cout << codedLine<< endl;
        }
        else
            cout << "You suck";

        return 0;
}

//Creating Swap Function:
void swap(char &value1, char &value2)
{
    char temp;
    temp = value1;
    value1 = value2;
    value2 = temp;
}

string code(int length, char line[], char cline[], char sAlphabet[])
{
    for(int i = 0; i < length; i++)
    {
        //Letter A:
        if(line[i] == 'A')
        {
            cline[i] = sAlphabet[0];
        }
            //Letter B:
        else if(line[i] == 'B')
        {
            cline[i] = sAlphabet[1];
        }
            //Letter C:
        else if(line[i] == 'C')
        {
            cline[i] = sAlphabet[2];
        }
            //Letter D:
        else if(line[i] == 'D')
        {
            cline[i] = sAlphabet[3];
        }
            //Letter E:
        else if(line[i] == 'E')
        {
            cline[i] = sAlphabet[4];
        }
            //Letter F:
        else if(line[i] == 'F')
        {
            cline[i] = sAlphabet[5];
        }
            //Letter G:
        else if(line[i] == 'G')
        {
            cline[i] = sAlphabet[6];
        }
            //Letter H:
        else if(line[i] == 'H')
        {
            cline[i] = sAlphabet[7];
        }
            //Letter I:
        else if(line[i] == 'I')
        {
            cline[i] = sAlphabet[8];
        }
            //Letter J:
        else if(line[i] == 'J')
        {
            cline[i] = sAlphabet[9];
        }
            //Letter K:
        else if(line[i] == 'K')
        {
            cline[i] = sAlphabet[10];
        }
            //Letter L:
        else if(line[i] == 'L')
        {
            cline[i] = sAlphabet[11];
        }
            //Letter M:
        else if(line[i] == 'M')
        {
            cline[i] = sAlphabet[12];
        }
            //Letter N:
        else if(line[i] == 'N')
        {
            cline[i] = sAlphabet[13];
        }
            //Letter O:
        else if(line[i] == 'O')
        {
            cline[i] = sAlphabet[14];
        }
            //Letter P:
        else if(line[i] == 'P')
        {
            cline[i] = sAlphabet[15];
        }
            //Letter Q:
        else if(line[i] == 'Q')
        {
            cline[i] = sAlphabet[16];
        }
            //Letter R:
        else if(line[i] == 'R')
        {
            cline[i] = sAlphabet[17];
        }
            //Letter S:
        else if(line[i] == 'S')
        {
            cline[i] = sAlphabet[18];
        }
            //Letter T
        else if(line[i] == 'T')
        {
            cline[i] = sAlphabet[19];
        }
            //Letter U:
        else if(line[i] == 'U')
        {
            cline[i] = sAlphabet[20];
        }
            //Letter V:
        else if(line[i] == 'V')
        {
            cline[i] = sAlphabet[21];
        }
            //Letter W:
        else if(line[i] == 'W')
        {
            cline[i] = sAlphabet[22];
        }
            //Letter X:
        else if(line[i] == 'X')
        {
            cline[i] = sAlphabet[23];
        }
            //Letter Y:
        else if(line[i] == 'Y')
        {
            cline[i] = sAlphabet[24];
        }
            //Letter Z:
        else if(line[i] == 'Z')
        {
            cline[i] = sAlphabet[25];
        }
            //Character Period:
        else if(line[i] == '.')
        {
            cline[i] = sAlphabet[26];
        }
            //Character Comma:
        else if(line[i] == ',')
        {
            cline[i] = sAlphabet[27];
        }
            //Character Space:
        else if(line[i] == ' ')
        {
            cline[i] = sAlphabet[28];
        }
        else
            cout << "Error" << endl;
    }
    return cline;
}

输出应该是允许我自己在代码行中编写代码,并看到它被重新置乱,这是加扰器工作的。

EN

回答 1

Stack Overflow用户

发布于 2019-03-24 12:57:30

我对R Sahu发布的线程中找到的\n字符使用ignore函数进行了修复。

我基本上只是在我的cin.getline之前添加了: cin.ignore(std::numeric_limits::max(),'\n')。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55320748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档