ifstream f("events.txt");
if (f.is_open())
{
string l,t;
string myArray[5];
int i = 0;
while (getline(f, l))
{
getline(stringstream(l), t, ',');
cout << t << endl;
myArray[i] = t;
cout << myArray[i] << endl;
i = i + 1;
}
したがって、次の内容を含む「events.txt」というファイルがあります。
An angry orc hits you with his weapon!,-50
A mage casts an evil spell on you!,-20
You found a health potion!,25
An enemy backstabs you from the shadows!,-40
You got eaten by a Dragon!,-1000
これまでのプログラムのこの部分は、コンマまでの文を出力し、それを配列に格納します。私の問題は、何らかの方法で番号にアクセスして別の配列に格納したり、イベントが発生したときに使用したりすることです。これは、プレーヤーのHPを下げるために使用されます。
前もって感謝します!
これを行う簡単な方法:
データを格納する構造体を定義します。
struct Event {
std::string message;
int number;
}
(両方のアイテムを別々の配列に格納しないでください。それらは一緒に属します。)
この構造体のベクトルを作成し、それにアイテムを追加します。
std::vector<Event> events;
while (getline(f, l)) {
size_t pos = l.find(',');
Event e;
e.message = l.substr(0, pos);
e.number = std::stoi(l.substr(pos+1));
events.push_back(e);
}
ただし、これは文字列にコンマが1つだけあることを前提としています。より柔軟にしたい場合は、std::strtok
または正規表現を使用してください。
別の推奨事項:I / Oを解析から分離します。int
コメントの1つで提案されているように、入力ストリームから直接のようにデータ型を読み取ろうとしないでください。代わりに、行全体または解析単位が何であれを読んでから、解析を実行してください。これにより、コードが読みやすくなり、エラー処理とデバッグが簡素化されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加