怎样能使得while语句的输入停止,为什么不能用不等于'\0'作为判断

代码

#include<iostream>

using namespace std;

int main()
{
    struct Sum
    {
        char name[20];
        int cnt;
    }sum[3];
    
    for(int i=0;i<3;i++)
        fgets(sum[i].name,20,stdin);
    
    string n;
    while(getline(cin,n)!='\0')
    {
        for(int i=0;i<3;i++)
            if(n==sum[i].name)
                sum[i].cnt++;
    }
    
    for(int i=0;i<3;i++)
        cout<<sum[i].name<<sum[i].cnt<<endl;
        
    return 0;
}

std::getline()返回的是std::cin本身的引用,它不能和字符比较,但你可以这样写

while (getline(cin, n)) {
   // ...
}

如果你遍历char数组,可以用判断是不是0作为跳出循环的条件,因为字符串以0结尾
但是getline函数是读取一行数据,它永远不会返回0呀
你问为什么这样,为什么那样之前,总要先问问它到底是什么样