输入字符流

时间:2015-12-07 12:34:23

标签: c++ string character

我正在尝试输入字符流,但我得到了奇怪的结果。

我正在尝试计算每行中a'sb'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'。我该如何解决这个问题?

2 个答案:

答案 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。