#include <bits/stdc++.h>
#define ll long long
using namespace std;
string x1[200005][3];
string yp[200005][3];
ll x,y,g,ans=0;
string c;
map <string,int> s;
int main(){
scanf("%lld",&x);
for(int i=1;i<=x;i++){
cin>>x1[i][1]>>x1[i][2];
}
scanf("%lld",&y);
for(int i=1;i<=y;i++){
cin>>yp[i][1]>>yp[i][2];
}
scanf("%lld",&g);
for(int i=1;i<=g;i++){
for(int j=1;j<=3;j++){
cin>>c;
s[c]=i;
}
}
for(int i=1;i<=x;i++){
if(s[x1[i][1]]!=s[x1[i][2]]){ //找不同的
ans++;
}
}
for(int i=1;i<=y;i++){
if(s[yp[i][1]]==s[yp[i][2]]){ //找相同的
ans++;
}
}
printf("%lld",ans);
return 0;
}
中使用到了 cin>>c,即代码第21行。
然而如下代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
string x1[200005][3];
string yp[200005][3];
ll x,y,g,ans=0;
string c;
map <string,int> s;
int main(){
scanf("%lld",&x);
for(int i=1;i<=x;i++){
cin>>x1[i][1]>>x1[i][2];
}
scanf("%lld",&y);
for(int i=1;i<=y;i++){
cin>>yp[i][1]>>yp[i][2];
}
scanf("%lld",&g);
for(int i=1;i<=g;i++){
for(int j=1;j<=3;j++){
scanf("%s",c);
s[c]=i;
}
}
for(int i=1;i<=x;i++){
if(s[x1[i][1]]!=s[x1[i][2]]){ //找不同的
ans++;
}
}
for(int i=1;i<=y;i++){
if(s[yp[i][1]]==s[yp[i][2]]){ //找相同的
ans++;
}
}
printf("%lld",ans);
return 0;
}
中第21行使用到了 scanf("%s",c),出现 RE,请问为什么这种写法不行?
另外 scanf("%s",c) 是我们老师教我们这么写的。