首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入字符流

输入字符流
EN

Stack Overflow用户
提问于 2015-12-07 12:34:22
回答 2查看 48关注 0票数 0

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

我试图在每一行中计算a'sb's的数量。

输入格式如下。

第一行包含测试用例(t)的数量。

第二行包含(n)的行数。

接下来的n行包含n输入的字符流。

这是代码片段。

代码语言:javascript
复制
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;
        }

我提供以下投入:

代码语言:javascript
复制
1

3

ab

ba

aa

我得到以下输出:

代码语言:javascript
复制
0   0

1   1

1   1

但我的预期产出是:

代码语言:javascript
复制
1   1

1   1

2   0

似乎有一个额外的'\n'i=0,这是由一个'i'的输出。我如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-12-07 12:47:28

您的char ch;定义了一个字符,但是没有初始化它,所以它的内容是不可预测的。

然后在while((ch != '\n'))中使用它,但是ch在第一步仍然没有初始化(当i=0时),这不是一个好的实践。

你应该试试

代码语言:javascript
复制
for (...) {

  do {

    ch = getchar();

    <check content of 'ch'>

  } while (ch != '\n');

}

代码语言:javascript
复制
for (...) {

  ch = getchar();

  while (ch != '\n') {

    <check content of 'ch'>

    ch = getchar();

  }
}
票数 0
EN

Stack Overflow用户

发布于 2015-12-07 13:29:00

若要在读取行数时从输入流中删除行尾,我建议使用

代码语言:javascript
复制
scanf("%d\n",&n);

正如@A.Gille所提到的,在将ch与任何东西进行比较之前,您还应该初始化ch。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34133683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档