我正在尝试输入字符流,但我得到了奇怪的结果。
我正在尝试计算每行中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'
。我该如何解决这个问题?
答案 0 :(得分:0)
您的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();
}
}
答案 1 :(得分:0)
要在读取行数时从输入流中删除行尾,我建议使用
scanf("%d\n",&n);
如@A所述。 Gille,你应该在将它与任何东西进行比较之前初始化ch。