我遇到了一个奇怪的问题:首先我需要scanf函数来输入一个特殊的流,如下所示:scanf("%s %4d/%2d/%2d", &temp.name, &temp.year, &temp.month, &temp.day);
,temp的类型是一个结束四个变量的结构:
struct citizen{
char* name;
int year;
int month;
int day;
}
实际上我使用字符串类型而不是char *,但scanf似乎不支持它。我创建一个向量,并将temp推入此向量,当我结束我的输入任务时,我想输出变量:结构的名称,但程序总是出错并分解,我的完整代码如下:< / p>
#include <iostream>
//#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
struct citizen{
char* name;
int year;
int month;
int day;
bool operator < (const citizen &A) const{
return (year*365+month*30+day) < (A.year*365+A.month*30+A.day);
}
};
int main(){
int n;
cin >> n;
vector<citizen> ci;
citizen temp;
int bb = 2014*365+9*30+6;
for(int i = 0; i < n; i++){
scanf("%s %4d/%2d/%2d", &temp.name, &temp.year, &temp.month, &temp.day);
bool p = 1;
int bt = temp.year*365+temp.month*30+temp.day;
if(bt>bb)
p = 0;
else if((bb-bt) > 200*365)
p = 0;
if(p)
ci.push_back(temp);
}
printf("%s", ci[0].year); //1st method to ouput
for(vector<citizen>::const_iterator it = ci.begin(); it != ci.end(); it++) //2nd method to ouput
cout << it->name;
//but both goes wrong
return 0;
}
任何想法?
答案 0 :(得分:1)
声明
scanf("%s %4d/%2d/%2d", &temp.name, &temp.year, &temp.month, &temp.day);
你有两个主要问题:
扫描字符串时,scanf
函数需要指向第一个字符的指针,该字符应为char*
类型。您将指针的&temp.name
传递给指针并且类型为char**
。
修复后,您使用temp.name
传递的指针指向...我不知道,您也不知道。它是未初始化的,将具有不确定和看似随机的值。您需要使用字符数组,或者动态分配内存并将结果分配给指针。
当然,如果您使用标准C ++输入代替std::cin
和std::string
,这根本不会成为问题。