2015-05-12 38 views
0

在我的程序中,我有一个时钟计时器,我需要将它保存到一个字符数组[10]中,然后将其实现到我的高分数函数中。通过我的程序,我已经有了格式化的时间。例如,如果时钟的秒数低于十,我必须添加一个零。所以,0:02,如果时钟的秒数大于10,则保持正常。而不是我在我的结构中使用两个int变量,我怎么才能写一个字符串到我的文本文件?例如,让我们写一个名为string clocksTime =“0:15”的字符串。请注意,它已被格式化。这里是我的代码:C++将结构中的字符串保存到文本文件中

struct highscore 
{ 
    // *Want* Change these two int values to a string 
    int clockMin; 
    int clockSec; 
}; 
...[Code]… 
// Change the two variables to have it instead, data[playerScore].clock = clocksTime 
data[playerScore].clockMin = clockData.minutes; 
data[playerScore].clockSec = clockData.seconds; 
_strdate(data[playerScore].Date); 

// Write the variables into the text file 
streaming = fopen("Highscores.dat", "wb"); 
fwrite(data, sizeof(data), 1 , streaming); 
+0

为什么不直接保存结构?如果你不得不再次加载文件,那么你可以把它加载到同一个结构体中不是很好吗?让数据成为数据和演示文稿。 – Mads

+0

fprintf有什么问题,或者,如果你确实需要一个字符串,snprintf?或者C++ iostreams/stringstream? – Sebastian

+0

使用'std :: string'而不是'char'数组更容易。你可以使用'std :: string'吗? –

回答

0

如果你可以使用std::string它更清洁。这里是一个程序,它是:

#include <iostream> 

using namespace std; 

void int_time_to_string(const int int_time, string& string_time); 

int main() { 

    int clockMin = 0; 
    int clockSec = 15; 

    string clockMinString; 
    string clockSecString; 

    int_time_to_string(clockMin, clockMinString); 
    int_time_to_string(clockSec, clockSecString); 

    string clockString = clockMinString + ":" + clockSecString; 

    cout << "clock = " << clockString << endl; 

    return 0; 
} 

// Convert a time in int to char*, and pad with a 0 if there's only one digit 
void int_time_to_string(const int int_time, string& string_time) { 

    if (int_time < 10) { 
     // Only one digit, pad with a 0 
     string_time = "0" + to_string(int_time); 
    } else { 
     // Two digits, it's already OK 
     string_time = to_string(int_time); 
    } 
} 

如果,另一方面,你不能使用std::string,你不得不求助于C字符串,那就是字符数组。我对此非常生疏,但我认为我们可以使用sprintf进行转换,并使用strcpy/strcat来处理一些较低级别的操作(例如最后放置'\ 0')。

#include <iostream> 
#include <cstring> 

using namespace std; 

void int_time_to_string(const int int_time, char* string_time); 

int main() { 

    int clockMin = 0; 
    int clockSec = 15; 

    char clockMinString[3] = ""; // 2 digits + null character 
    char clockSecString[3] = ""; // 2 digits + null character 

    int_time_to_string(clockMin, clockMinString); 
    int_time_to_string(clockSec, clockSecString); 

    char clockString[6]; // 2 digits, colon, 2 more digits, null character 
    strcpy(clockString, clockMinString); 
    strcat(clockString, ":"); 
    strcat(clockString, clockSecString); 

    cout << "clock = " << clockString << endl; 

    return 0; 
} 

// Convert a time in int to char*, and pad with a 0 if there's only one digit 
void int_time_to_string(const int int_time, char* string_time) { 

    if (int_time < 10) { 
     // Only one digit, pad with a 0 
     strcpy(string_time, "0") ; 
     char temp[2]; // 1 digit + null character 
     sprintf(temp, "%d", int_time); 
     strcat(string_time, temp); 
    } else { 
     // Two digits, it's already OK 
     sprintf(string_time, "%d", int_time); 
    } 
} 

在这两种情况下,你只需要采取clockString

相关问题