所以我知道如何使用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;
}
这个程序似乎将一些字符视为行尾。有人可以解决这个并解释我。提前谢谢!
答案 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;
}