gpt4 book ai didi

c++ - 如何输出属于 vector 数组的结构字符串?

转载 作者:行者123 更新时间:2023-11-28 04:49:12 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题:首先我需要 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;
}

其实我用的是string类型而不是char *,但是scanf好像不支持。我创建了一个 vector ,并将 temp 插入这个 vector ,当我结束我的输入任务时,我想输出变量:结构的名称,但是程序总是出错并崩溃,我的完整代码如下:

#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;
}

有什么想法吗?

最佳答案

与声明

scanf("%s %4d/%2d/%2d", &temp.name, &temp.year, &temp.month, &temp.day);

你有两个主要问题:

  1. 当扫描字符串时,scanf 函数需要一个指向第一个字符的指针,该字符的类型应该是 char*。您传递 &temp.name,它是一个指向该指针 的指针,类型为 char**

  2. 一旦你解决了这个问题,你通过 temp.name 传递的指针就是指向......我不知道,你也不知道。它未初始化,将具有一个不确定 且看似随机的值。您需要改用字符数组,或者动态分配内存并将结果分配给指针。

当然,如果您将标准 C++ 输入与 std::cinstd::string 一起使用,这根本就不是问题。

关于c++ - 如何输出属于 vector 数组的结构字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com