gpt4 book ai didi

c++ - '@' 在基于 ctime 的函数中打印出来

转载 作者:行者123 更新时间:2023-11-28 05:41:07 25 4
gpt4 key购买 nike

我正在开发一个头文件,它具有打印日期的功能。以下执行上述操作:

    char Date(string date_format){
if(date_format == "gg\dd\yyyy"){
time_t t = time(0);
struct tm * now = localtime( & t );
cout << (now->tm_mday) << '/'
<< (now->tm_mon + 01) << '/'
<< (now->tm_year + 1900);
}
if(date_format == "mm\dd\yyyy"){
time_t t = time(0);
struct tm * now = localtime( & t );
cout << (now->tm_mon + 01) << '/'
<< (now->tm_mday) << '/'
<< (now->tm_year + 1900);
}

因此,要在 .cpp 文件中使用此函数,您必须编写

    cout << Date("dd\mm\yyyy") << endl;

它将打印出“6/5/2016”它将打印意大利语日期格式,如果我设置英语日期格式 (mm\dd\yyyy),它会在日期末尾打印波浪号:5/6/2016@也许这是一个愚蠢的错误,也许是因为反斜杠让编译器认为我正在尝试使用像'\n'这样的转义序列,但是不存在带有'\m'或'\d'的转义序列所以我认为它不是问题。提前致谢。

最佳答案

你的代码有很多问题。

1) 您传递了格式“dd\mm\yyyy”,但是在 Date() 中未检查此格式(您检查了“gg\dd\yyyy”和“mm\dd\yyyy")

2) 你的函数被声明为一个返回 char 的函数,但是里面没有 return

3) 正如 Kaz 所建议的那样,您应该将每个 '\' 加倍转义(因此“gg\\dd\\yyyy”、“mm\\dd\\yyyy”等。 )

4) 我认为您应该编写一个函数来创建并返回一个 std::string,避免使用输出流。您的实际函数写入 std::cout 但返回(不返回,参见第 2 点)一个 char;返回值是什么意思?如果Data()写在std::cout()中,应该这样使用

Data("dd\\mm\\yyyy");
std::cout << std::endl;

如果Data()返回一个std::string,那么你可以这样写

std::cout << Data("dd\\mm\\yyyy") << std::endl;

我建议 Data() 应该返回一个 std::string 以便您可以将它与其他流一起使用; std::cerr,示例

std::cerr << Data("dd\\mm\\yyyy") << std::endl;

5) 不需要重复time()/localtime()部分;两种情况下都是一样的

我提出以下版本

std::string Date (std::string const & format)
{
std::ostringstream oss;

time_t t = time(0);
tm * now = localtime( & t );

if ( "gg\\dd\\yyyy" == format )
oss << (now->tm_mday) << '/'
<< (now->tm_mon + 01) << '/'
<< (now->tm_year + 1900);
else if ( "mm\\dd\\yyyy" == format )
oss << (now->tm_mon + 01) << '/'
<< (now->tm_mday) << '/'
<< (now->tm_year + 1900);
// else if .... (other formats?)
else
oss << "unrecognized format";

return oss.str();
}

或者,如果您使用的是 C++11 或 C++14,则可以使用 std::to_string(),避免 std::ostringstream

std::string Date (std::string const & format)
{
std::string str;

time_t t = time(0);
tm * now = localtime( & t );

if ( "gg\\dd\\yyyy" == format )
str = std::to_string(now->tm_mday) + "/"
+ std::to_string(now->tm_mon + 01) + "/"
+ std::to_string(now->tm_year + 1900);
else if ( "mm\\dd\\yyyy" == format )
str = std::to_string(now->tm_mon + 01) + "/"
+ std::to_string(now->tm_mday) + "/"
+ std::to_string(now->tm_year + 1900);
// else if .... (other formats?)
else
str = "unrecognized format";

return str;
}

p.s.:抱歉我的英语不好

关于c++ - '@' 在基于 ctime 的函数中打印出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074496/

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