写入文件 与 FStream 不起作用
Writing to file With FStream Not Working
我正在尝试制作一个程序,人们在其中输入他们的首选项文件,以记录他们本周想要做的事情。我做了一个巨大的 if else 声明,需要帮助我的 else 声明。我的 else 语句对用户/成员是公平的,因为他们的列表是随机选择的并创建文件。但是,else 语句创建文件,但不向其写入任何角色。这是代码:
else {
string positions[23] =
{ "Day_Clean" "Dinner_Cook" "Dinner_Cook" "Dinner_Clean" "Dinner_Clean" "HEB_Shop" "Costco_Shop" "Silver_Fridge" "Stove_Micowave" "Appliance_Clean" "LH_Bathrooms" "Laundry_Room" "Upstairs_Commons" "Bikeroom_Entrance_Stairs" "Little_House_Commons" "Porch_Grounds" "Recycling" "Gardening" "Condi_Fridge_Personal_Fridge" "Freezer" "Downstairs_Bathroom_1" "Downstairs_Bathroom_2" "Upstairs_Bathroom" "Big_House_Hallways" };
ofstream randomPrefs;
randomPrefs.open(foo);
int randomPrefloopcount;
do {
int randomPrefs1 = rand() % 25;
randomPrefs << positions[randomPrefs1] << "n";
randomPrefloopcount++;
} while(randomPrefloopcount <= 24);
randomPrefs.close();
文件已创建,但它们均为空白。请帮忙!
正如Sam Varshavchik所说,你的问题在于数组中的元素数量和循环之间。
假设你的值永远不会改变,有一种更安全的方法在 c++11 中声明和使用这样的数组。
#include <array>
#include <iostream>
int main()
{
constexpr std::size_t kArraySize{ 3 };
constexpr std::array<const char *, kArraySize> kArray {
"hehe"
, "hehe"
// , "hehe" // this one would work since there is 3 elements defined
// , "hehe" // this one would fail to compile
};
for (auto element : kArray)
{
if (element != nullptr)
{ std::cout << "element: " << element << std::endl; }
else
{ std::cout << "element is null" << std::endl; }
}
}
std::array 确保未由用户定义的值将被零初始化,在这种情况下,这意味着它们将被 nullptr'ed。
在 C++11 §8.5/8 中指定:
对 T 类型的对象进行值初始化意味着:
— 如果 T 是没有用户提供的(可能符合 cv 条件的)类类型 或删除默认构造函数,则对象初始化为零..., 如果 T 有一个非平凡的默认构造函数,则对象为 默认初始化;
引用从这篇文章中窃取的。
编辑,应用于您的代码,它将如下所示:
else {
constexpr std::size_t kArraySize{ 23 };
constexpr std::array<const char *, kArraySize> kPositions { "Day_Clean", "Dinner_Cook", "Dinner_Cook", "Dinner_Clean", "Dinner_Clean", "HEB_Shop", "Costco_Shop", "Silver_Fridge", "Stove_Micowave", "Appliance_Clean", "LH_Bathrooms", "Laundry_Room", "Upstairs_Commons", "Bikeroom_Entrance_Stairs", "Little_House_Commons", "Porch_Grounds", "Recycling", "Gardening", "Condi_Fridge_Personal_Fridge", "Freezer", "Downstairs_Bathroom_1", "Downstairs_Bathroom_2", "Upstairs_Bathroom", "Big_House_Hallways" };
ofstream randomPrefs;
randomPrefs.open(foo);
std::size_t maxRandomLoop { 25 };
for (std::size_t i = 0 ; i < maxRandomLoop ; ++i)
{
int randomPrefs1 = rand() % kArraySize;
if (kPositions[randomPrefs1] != nullptr)
{ randomPrefs << kPositions[randomPrefs1] << "n"; }
}
randomPrefs.close();
}
重新编辑后,您忘记了数组中的逗号。
一个简单的程序来验证一个概念:
#include <iostream>
int main()
{
static const char *tokens[] = {"Tory" "Grant"};
static const char *mythbusters[] = {"Adam", "Jamie"};
// Print out the quantity of elements:
std::cout << "Elements in tokens: " << (sizeof(tokens) / sizeof(tokens[0])) << "n";
std::cout << "Elements in mythbusters: "
<< (sizeof(mythbusters) / sizeof(mythbusters[0]))
<< "n";
return 0;
}
这将显示字符串文本的串联和指定多个文本之间的区别。
编辑:在令牌和流言终结者之前添加"*"。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 写入文件 与 FStream 不起作用
- c++fstream read()函数不起作用
- Xcode 5 c++ fstream(ifstream 和 ofstream)不起作用
- fstream::open() Unicode 或非 ASCII 字符在 Windows 上不起作用(使用 std::ios::out)
- 尝试使用 fstream 打开文件,但它不起作用
- C++:模板 fstream.write 不起作用