#include<bits/stdc++.h>
using namespace std;
class Student{
public:
int num;
string name;
char sex;
int age;
};
bool cmp(Student a,Student b){
return a.num>b.num;
}
int main(){
Student s[4];
string ss;
char c;
s[0].num=10,s[0].name="wes",s[0].sex='f',s[0].age=23;
s[1].num=20,s[1].name="ert",s[1].sex='f',s[1].age=45;
s[2].num=30,s[2].name="str",s[2].sex='t',s[2].age=89;
cout<<"請輸入指令:"<<endl;
cin>>ss;
c=ss[0];
if(c=='I'){
string name;
char sex;
int num,age;
sscanf(ss,"I%d,%[^,],%[^,],%d",&num,name,sex,&age);
s[3].num=num;
s[3].name=name;
s[3].sex=sex;
s[3].age=age;
sort(s,s+4,cmp);
for(int j=0;j<4;j++)
cout<<"("<<s[j].age<<","<<s[j].name<<","<<s[j].sex<<","<<s[j].num<<")"<<endl;
}
if(c=='D'){
int m;
sscanf(ss,"D%d",&m);
for(int i=0;i<4;i++){
if(s[i].num==m){
s[i].age=s[3].age;
s[i].name=s[3].name;
s[i].sex=s[3].sex;
s[i].num=s[3].num;
}
}
sort(s,s+3,cmp);
for(int j=0;j<3;j++)
cout<<"("<<s[j].age<<","<<s[j].name<<","<<s[j].sex<<","<<s[j].num<<")"<<endl;
}
return 0;
}
是兩個sscanf出錯,錯誤原因是error C2664: 'sscanf' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
uj5u.com熱心網友回復:
sscanf(ss,"I%d,%[^,],%[^,],%d",&num,name.c_str();,sex,&age);
uj5u.com熱心網友回復:
sscanf(ss,"I%d,%[^,],%[^,],%d",&num,name,sex,&age);name是string, 要獲得地址,需要用name.c_str()
uj5u.com熱心網友回復:
直接用name.c_str()比較麻煩,最好還是利用中間變數,然后賦值給name直接更改c_str()回傳的地址,并沒有和string的size匹配上
char temp[20];
sscanf里面傳參temp
而后,name = temp; 這樣更穩妥
uj5u.com熱心網友回復:
兩位大哥的方法試了還是沒用。。而且我下面的這個sscanf(ss,"D%d",&m);也是同樣的錯誤轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124505.html
標籤:C++ 語言
上一篇:【技術普及】國標GB28181協議內SIP監控域互聯結構解釋
下一篇:【SDOI2014】數數 段錯誤
