关于cinのscanf
查看原帖
关于cinのscanf
747744
封禁用户楼主2022/7/22 22:42
#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) 是我们老师教我们这么写的。

2022/7/22 22:42
加载中...