@[qym110809](/user/1038710) getline的问题,换成cin就能过,另外getchar好像没什么用
等我找找原因
by TankYu @ 2024-03-21 20:00:24
Windows 下换行符是 `\n\r` 两个字符,因此 `getline` 后需要 `getchar`。
by 红黑树 @ 2024-03-21 20:06:13
@[qym110809](/user/1038710)
https://zh.cppreference.com/w/cpp/string/basic_string/getline
从此处可知getline读到分隔符就停,合理猜测输入的n后面存在空白符,因此你第一行行末会多个 `'\n'`,这便导致第一个getline失效,可改为
```cpp
#include<bits/stdc++.h>
using namespace std;
struct node{
int l,r;
char sum;
}T[128];
string s="a**";
void vis(int id){
if(id==-1)return;
cout<<T[id].sum;
vis(T[id].l);
vis(T[id].r);
}
int main(){
int n;
cin>>n;
cin >> ws;//同getchar(),getchar();
int rt;
for(int i=1;i<=n;i++){
getline(cin,s);
std::cin >> std::ws;
if(i==1)rt=s[0]-'a'+1;
int fid=s[0]-'a'+1;
T[fid].sum=s[0];
if(s[1]!='*')T[fid].l=s[1]-'a'+1;
else T[fid].l=-1;
if(s[2]!='*')T[fid].r=s[2]-'a'+1;
else T[fid].r=-1;
}
vis(rt);
}
```
在getline页面向下滑可以看到有关 `std::ws` 的内容
by TankYu @ 2024-03-21 20:14:14
已AC,已关,此帖结
by qym110809 @ 2024-03-21 21:28:31