如何在c ++中使用cin.get()来获取行尾字符

时间:2017-03-18 15:47:21

标签: c++ line eol

所以我知道如何使用cin.get()以及如何使用缓冲区等我想。这是一个示例程序,它获取表的n(数字或行)和m(列数)。然后它获得n * m个字符,将它们保存在一个数组中并输出它们:

#include <bits/stdc++.h>
using namespace std;
int n, m;
char in;
char a[100][100];
int main()
{
    cin >> n >> m;
    for(int i = 0;i < n; ++i)
    {
        for(int j = 0;j < m; ++j)
        {
            cin.get(in);
                a[i][j] = in;
            if(j == m - 1)
                cin.get();
        }
    }
for(int i = 0;i < n; ++i)
{
    for(int j = 0;j < m; ++j)
    cout <<a[i][j];
    cout << endl;
}
    return 0;
}

这个程序似乎将一些字符视为行尾。有人可以解决这个并解释我。提前谢谢!

2 个答案:

答案 0 :(得分:0)

当您输入n和m时,cin.get()将立即在数字后面的字符处开始,该数字可以是空格或新行。因此,您期望的输入与您获得的输入之间可能会发生转换。这会导致每个m chars被忽略,即使不是换行符,也可以是converseky,要读取一些换行而不是另一个char。

提取数字后,cin.ignore()字符会更安全,直到第一个新行。

同样,检查您跳过的每个第n个字符,如果它是您期望的换行符。

答案 1 :(得分:0)

如果你不想要endl和space字符,你必须使用cin;

只需用cin&gt;&gt;

替换cin.get()
#include <bits/stdc++.h>
using namespace std;
int n, m;
char in;
char a[100][100];
int main()
{
    cin >> n >> m;
    for(int i = 0;i < n; ++i)
    {
        for(int j = 0;j < m; ++j)
        {
            cin>>in;
                a[i][j] = in;
        }
    }
for(int i = 0;i < n; ++i)
{
    for(int j = 0;j < m; ++j)
    cout <<a[i][j];
    cout << endl;
}
    return 0;
}