回车不能在xcode console c ++中运行

时间:2017-02-10 19:26:46

标签: c++ ios xcode

我想输出时间并循环它以便不断更新时间而不会一次又一次地输出相同的行,所以我认为id通过使用马车来覆盖该行,但它似乎不起作用我不喜欢知道为什么,是否与Xcode有关?我以前读过有关\ r \ n的堆栈溢出的其他帖子,并尝试调整我的代码的答案,但没有一个解决方案似乎工作,也没有与ios / Xcode相关。我也假设问题可能与Xcode控制台有关,就像它不是终端一样(但我不确定)

#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, const char * argv[]) {
    //Loop Forever
    for(;;){
        time_t rawtime;
        struct tm * timeinfo;
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
        cout << "The current date/time is: " << asctime(timeinfo) << "\r";
    }
    return 0;
}


output:

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

The current date/time is: Fri Feb 10 17:20:43 2017

2 个答案:

答案 0 :(得分:1)

您遇到的问题是由于此功能asctime(timeinfo)。如果转储此函数输出的十六进制输出,则它包含'\n'。这是一个例子

467269204665622031302032333A33343A303620323031370A

请注意最后2个字符。它是0x0A,这意味着它在字符串的末尾有'\n'。所以无论你尝试什么,它都无法解决问题直到你修复这个字符串。您需要从字符串中删除\n字符,然后添加'\r'即可满足您的需求。这是我的解决方案(我在C ++中混合C代码,因为asctime()返回char *)。您可以找到其他解决方案。

#include <iostream>
#include <time.h>
using namespace std;

void remove_all_chars(char* str, char c) {
    char *pr = str, *pw = str;
    while (*pr) {
        *pw = *pr++;
        pw += (*pw != c);
    }
    *pw = '\0';
}

int main(int argc, const char * argv[]) {
    //Loop Forever
    for(;;){
        time_t rawtime;
        struct tm * timeinfo;
        time ( &rawtime );
        timeinfo = localtime ( &rawtime );
        char *timeString = asctime(timeinfo);
        remove_all_chars(timeString, '\n');
        cout << "The current date/time is: " << timeString << "\r";
    }
    return 0;
}

使用原始代码:

enter image description here

使用我修改过的代码

enter image description here

答案 1 :(得分:0)

有时为了获得正确的返回,你需要使用\ r \ n和使用转义字符时我相信你需要双引号而不是单引号或者它被渲染为文字。确保为操作系统使用正确的返回类型 - \r\n , \r , \n what is the difference between them?