在C ++中获取多行输入

时间:2014-04-17 20:35:45

标签: c++ input while-loop

第一行包含整数n(1≤n≤100)。以下n行中的每一行包含一个单词。所有单词均由小写拉丁字母组成,长度为1到100个字符。 (来源:http://codeforces.com/problemset/problem/71/A

如何从给定n的用户那里获得输入?我尝试使用while循环,但它不起作用:

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int i;

    while (i<=n) {

        cin>>i ;
        i++;

    }



}

2 个答案:

答案 0 :(得分:0)

您的循环与您的需求相差甚远。你写的是非常错误的,除了学习循环,变量和输入的基础知识之外我不能提供建议。您需要的帮助超出了简单问题/答案的范围,您应该考虑购买一本书并通过它来覆盖。考虑阅读Programming Principles and Practice Using C++

这是一个近似问题要求的工作示例。我把文件输入和输出作为练习留给你。我还使用了C ++ 11的前后std :: string成员。你必须在旧版本中通过数组索引访问。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main(){
    int totalWords;
    cin >> totalWords;
    stringstream finalOutput;

    for (int i = 0; i < totalWords; ++i){
        string word;
        cin >> word;
        if (word.length() > 10){
            finalOutput << word.front() << (word.length() - 2) << word.back();
        }else{
            finalOutput << word;
        }
        finalOutput << endl;
    }

    cout << endl << "_____________" << endl << "Output:" << endl;
    cout << finalOutput.str() << endl;
}

话虽如此,让我给你一些建议:

有意义地命名变量。像我上面的for循环中的“int i”是一个常见的习语,“i”代表索引。但通常你想避免使用i做任何其他事情。而不是n,称之为totalWords或类似的东西。

此外,确保在访问之前初始化所有变量。当您第一次进入while循环时,我没有定义的值。这意味着它可以包含任何内容,实际上,您的程序可以执行任何操作,因为它是未定义的行为。

顺便说一句:为什么你在你的例子中读到一个整数?你为什么要递增呢?那是什么意思?如果你读入用户的输入,他们可以输入0,然后你增加1将其设置为1 ...下一次迭代可能他们将输入-1并且你将它递增1并将其设置为0。 ..然后他们可以输入10001451并递增1并将其设置为10001452 ...你在这里看到逻辑的问题吗?

您似乎正在尝试使用i作为迭代总数的计数器。如果您这样做,请不要从用户读取i的输入。这完全破坏了目的。在我的示例中使用单独的变量。

答案 1 :(得分:0)

你可能想要有类似的东西:

#include <iostream>

int main() {
    int n;
    cin>>n;
    int theInputNumbers[n];

    for(int i = 0; i<n; ++i) {
        cin >> theInputNumbers[i];
    } 
}