我试图输入字符流,但我得到了奇怪的结果。
我试图在每一行中计算a's和b's的数量。
输入格式如下。
第一行包含测试用例(t)的数量。
第二行包含(n)的行数。
接下来的n行包含n输入的字符流。
这是代码片段。
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
char ch;
int arr[n][2]={};
for(int i=0; i<n; i++)
{
while((ch != '\n'))
{
ch=getchar();
if(ch == 'a')
{
arr[i][0]++;
}
else if(ch == 'b')
{
arr[i][1]++;
}
}
cout<<arr[i][0]<<"\t"<<arr[i][1]<<endl;
}我提供以下投入:
1
3
ab
ba
aa我得到以下输出:
0 0
1 1
1 1但我的预期产出是:
1 1
1 1
2 0似乎有一个额外的
'\n'为i=0,这是由一个'i'的输出。我如何解决这个问题?
发布于 2015-12-07 12:47:28
您的char ch;定义了一个字符,但是没有初始化它,所以它的内容是不可预测的。
然后在while((ch != '\n'))中使用它,但是ch在第一步仍然没有初始化(当i=0时),这不是一个好的实践。
你应该试试
for (...) {
do {
ch = getchar();
<check content of 'ch'>
} while (ch != '\n');
}或
for (...) {
ch = getchar();
while (ch != '\n') {
<check content of 'ch'>
ch = getchar();
}
}发布于 2015-12-07 13:29:00
若要在读取行数时从输入流中删除行尾,我建议使用
scanf("%d\n",&n);正如@A.Gille所提到的,在将ch与任何东西进行比较之前,您还应该初始化ch。
https://stackoverflow.com/questions/34133683
复制相似问题