在控制台中读取一行直到换行

Reading a row until newline in the console

我需要编写一个程序来连续读取 n 个数字。例如,用户首先输入一个包含 2 个数字的列表,如下所示:

P n

我设法阅读了带有 scanf 的那些,但现在我需要阅读后面的 n 个数字,这些数字如下所示连续给出。

1 6 3 99 ... n times 这些数字必须一次全部看完(或者给人的印象)。

我已经尝试使用

while(getline(cin,str)){
// do something with str
} 

this thread 中所述,但我需要 while 循环内的操作在我按下介绍键时停止。在我当前的实现中,它们不会停止,它只是一直在等待更多的行来读取。

总结: 首先,用户必须能够输入两个数字(Pn)(完成!)然后按回车键并开始输入 n 个数字的列表(未完成!)。

这是我的代码。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
int main(void){
    int P,n;
    scanf("%d %d",&P,&n);
    string val;
    int score[P];
    int i;
    for(i=0;i<P;i++){
        score[i]=0;
    }
    while(getline(cin,val)){
        printf("Val=%s\n",val.c_str());
        stringstream stream(val);
        int local;
        while(stream >> local){
            score[local]=score[local]+1;
            printf("%d-%d\n",local,score[local]);
        }

    }
    for(i=0;i<P;i++){
        printf("%d-%d\n",i,score[i]);
    }
    return 0;
}

在 n 次循环中使用 scanf() 而不是 getline()。

for(int i = 0; i < n; i ++){
   scanf("%d",&variable);
}

不确定我是否理解您的问题,但此代码将读取 2 个数字,然后一行,然后完成。

using namespace std;

int main(){
    int P,n;

    cin >> P;
    cin >> n;

    int *score = new int[P];

    for(int i=0;i<P;i++){
        score[i]=0;
    }

    int num;

    string val;

    cin.ignore();
    getline(cin, val);

    istringstream stream(val);

    while (stream >> num) {

        printf("Val = %d\n", num);

        score[num]=score[num]+1; // potential segmentation fault here in your code

        printf("%d-%d\n",num,score[num]);
    }

    delete [] score;

    return 0;

}

之所以会出现错误,是因为您假设线上的数字小于 P,即数组的大小。但是,以下输入会导致错误:

1 2 5

这道题几乎是经典。经典题有这段代码:

cin >> n;
getline(cin, s);

然后作者很疑惑为什么s是空的。您的变体也是如此,尽管它也使用 C stdio 函数使事情变得更加混乱。问题是第一个调用是基于字段的输入,它将读取单个值 n 并将任何其他输入留在缓冲区中!如果用户输入 42 并按下回车键,剩下的输入就是换行符。第二个 getline() 调用然后读取一个空字符串并丢弃换行符。

为了与用户交互,只使用getline()然后尝试解析每一行。使用 stringstreams 或 sscanf(),因为您似乎很熟悉它,这都是有效的选择。但是,如果您只想阅读输入而不是真正互动,David Weston 的建议也是一个很好的建议,而且可能也是最简单的建议。但是,由于您使用的是 C++,我建议改用 cin >> variable