[英]C++ Save a string from a struct into a text file
在我的程序中,我有一个时钟计时器,我需要将其保存到char数组[10]中,然后将其实现到我的高分函数中。 通过我的程序,我已经有了格式化的时间。 例如,如果时钟的秒数小于十,则必须添加零。 因此,为0:02,并且如果时钟的秒数大于10,它将保持正常。 代替我在结构中使用两个int变量,如何将字符串写入文本文件? 例如,让我们编写一个名为string clocksTime =“ 0:15”的字符串。 请注意,它已经被格式化。 这是我的代码:
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);
如果您可以使用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字符串,即char数组。 我对此非常不满意,但是我认为我们可以使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.