如何读取多行输入?

3

所以我构建了一个小型基本数据加密器(仅用于学习目的)。它完美地工作,但它只读取一行输入。是我的编辑器问题还是我的代码存在一些问题。

PS:我使用 CodeBlocks

#include <iostream>
#include <ctype.h>

using namespace std;

int main()
{
    std::string str;
    char enc;
    int word;
    cout << "\t\t\t\t\t\t\t\tENCRYPTOR" <<endl;
    cout << "\t\t\t\t\t\t\t\t---------" <<endl;
    cout << "Enter a Word: ";
    getline(cin, str);
    int n = 0;
    cout << "\n\n\t\t\t\t\t\t\t\tENCRYPTED D@T@" <<endl;
    cout << "\t\t\t\t\t\t\t\t--------------\n\n" << endl;
    for(int i = 0; i < str.length(); i++){
        int randomAdd[5] = {5,6,2,3,2};
        int size = sizeof(randomAdd)/sizeof(randomAdd[0]);
//        for(int j = 0; j < 5; j++){
        word = str.at(i);
        if(i%5 == 0){
            n = 0;
        }
        enc = int(word) + randomAdd[n];
        std::cout << char(enc);
        n++;
    }

 return 0;
}

这个有效。
Hello World

但我无法进入这个页面

Hello World
Have a nice day

否则程序将在不显示错误或信息的情况下退出命令提示符。

如何读取多于一行的内容?


7
您说您输入了 10-15 行,但是您的代码只能读取一行。 - Yksisarvinen
3
在输入第一行后(即按下回车键后),你的代码应该继续运行并在你输入第二行之前完成。这不是发生的情况吗? - 463035818_is_not_a_number
1
原来你的实际问题是:如何读取多行。那么对你来说,问题是:你的代码应该如何知道输入何时完成? - 463035818_is_not_a_number
2
我们所谓的“单行”可以跨越显示器上的多个“行”。 “单行”是指在遇到换行符'\n'之前的文本。 - 463035818_is_not_a_number
2
我稍微改了一下你的问题陈述,希望你能够检查一下是否准确描述了你的问题。如果不行,我们可以回滚。 - 463035818_is_not_a_number
显示剩余11条评论
2个回答

0
这段代码示例允许您从命令行/ shell 交互式地输入多行内容。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    string str;
    char enc;
    int word;
    vector<string> myInput;
    cout << "\t\t\t\t\t\t\t\tENCRYPTOR" <<endl;
    cout << "\t\t\t\t\t\t\t\t---------" <<endl;
    while (str != "Enigma")
    {
        cout << "Enter a line (Write Enigma to exit input): ";
        getline(cin, str);
        myInput.push_back(str);
    }
    int n = 0;
    cout << "\n\n\t\t\t\t\t\t\t\tENCRYPTED D@T@" <<endl;
    cout << "\t\t\t\t\t\t\t\t--------------\n\n" << endl;
    for(auto & myInputLine : myInput)
    {
        str = myInputLine;
        for (size_t i = 0; i < str.length(); i++) {
            int randomAdd[5] = { 5,6,2,3,2 };
            int size = sizeof(randomAdd) / sizeof(randomAdd[0]);
            word = str.at(i);
            if (i % 5 == 0) {
                n = 0;
            }
            enc = int(word) + randomAdd[n];
            std::cout << char(enc);
            n++;
        }
    }
    return 0;
}

如果输入中出现了Enigma,则表示输入已完成。

所有的输入都存储在STL的vector容器中,请参见vector

之后,您的算法将加密所有行。

希望这有所帮助?


嘿@CKE,我是一个初学者(大约15天),我想知道这段代码是否很糟糕或者一般般。如果你能回复我,我会很高兴的。谢谢。 - user10136900
@ShivamJha: 老实说我无法判断这个。我认为你的算法只是在工作,但我建议你编写一个解密器来检查你的加密有多好。也许你可以请朋友来解密你的输出;)。 - CKE
@ShivamJha:请随意将此答案标记为已接受(答案左侧的复选标记)。提前致谢。 - CKE

0

你可以这样做

#include <iostream>

using namespace std;

int main() {

  string str;
  
  while (getline(cin, str)) {
    cout << str << endl;
  }

  return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接