https://pintia.cn/problem-sets/994805260223102976/problems/994805273883951104
这题就是用cin.peek()判断换行的时候要注意,用cin.clear()和cin.ignore()清除上一个换行符,不然cin的缓冲区里永远是\n,无论如何都只能执行第一整遍while循环。
#include<iostream>
using namespace std;
int main() {
int i=1, j=1, k=1, flag;
string hand[11], eye[11], mouth[11], temp;
char ch;
for (int m = 0; m < 3; ++m){
while(cin.peek()!='\n'){
cin >> ch;
if(flag == 0 && ch == '['){// 开始
flag = 1;
temp = "";
}else if(flag == 1 && ch != ']'){// 中间
temp += ch;
}else if(flag == 1 && ch == ']'){// 结束
flag = 0;
if(m == 0){// 手
hand[i++]=temp;
}else if(m == 1){// 眼
eye[j++]=temp;
}else if(m == 2){// 嘴
mouth[k++]=temp;
}
}
}
cin.clear();
cin.ignore();
}
int n, a, b, c, d, e;
cin >> n;
for(int m=0; m<n; m++){
scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
if(a>=i||b>=j||c>=k||d>=j||e>=i||a<=0||b<=0||c<=0||d<=0||e<=0){
cout << "Are you kidding me? @\\/@" << endl;
}else{
cout << hand[a] << "(" << eye[b] << mouth[c] << eye[d] << ")" << hand[e] << endl;
}
}
return 0;
}