在C++中获取多行输入

Getting multiple lines of input in C++

本文关键字:输入 获取 C++      更新时间:2023-10-16

第一行包含一个整数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++;
    }

}

您可能想要这样的东西:

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

您的循环与您的需求相去甚远。你所写的是极其错误的,以至于我除了学习循环、变量和输入的基础知识之外,无法提供其他建议。你需要的帮助超出了一个简单的问题/答案的范围,你应该考虑买一本书,并从头读到尾。考虑阅读C++的编程原理和实践

以下是一个与您的问题要求近似的工作示例。我将文件输入和输出作为练习留给您。我还使用了C++11的前后std::字符串成员。在旧版本中,您必须通过数组索引进行访问。

#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用于其他任何事情。用totalWords或类似的词代替n。

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

顺便说一句:你为什么在你的例子中读一个整数i?你为什么要增加它?这样做的目的是什么?如果你从用户那里读取输入,他们可以键入0,然后你递增1,将其设置为1…下一次迭代可能他们会键入-1,然后你将其递增1,并将其设置成0…然后他们可以键入10001451,你递增1并将其设置为10001452…你看到这里的逻辑有问题吗?

似乎您正在尝试使用i作为迭代总数的计数器。如果要执行此操作,请不要也不要将用户的输入读取到i中。这完全破坏了目的。使用一个单独的变量,如我的示例所示。