【玄关】C++14不开O2全RE求助(本地及ide都过)

P1305 新二叉树

@[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


|