[英]Reading a 2D char array from file in C++
首先,我對C ++的知識非常有限,這是我的第一堂課,因此,這看起來可能很愚蠢,但請耐心等待,我想請您將其保持簡單或預先解釋好。
確定的目標是我想使用內部規則創建此文件,以便可以在單獨的函數中讀取它。 但是,當我運行此程序時,我沒有出現任何錯誤,但首先出現的結果是完全沒有空格,最后我得到了一些隨機的ascii。
這是運行代碼Welcometothetypinggame1.Typeinentilineinoneline2.Istimedand將影響分數Ø-™wîú{Dx&a¼Ë'©ÉaDx&a®pa的結果
#include <cstdlib>
#include <fstream>
#include <iostream>
int main(int argc, char** argv) {
//set the sentences i want the file to print
char o[3][40]={"Welcome to the typing game ",
"1. Type the entire sentence in one line",
"2. Is timed and will affect the score "};
//creating the file to read in
ofstream out;
out.open("rules.txt");
for(int i=0;i<3;i++){
for(int x=0; x<39; x++){
out<<o[i][x];
}
out<<"\n";
}
out.close();
//creating a new array to read the data that was stored above
char a[3][40];
ifstream in;
in.open("rules.txt");
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
in>>a[i][x];
}
}
in.close();
//and just printing out the array to see the results
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
cout<<a[i][x];
}
}
return 0;
}
在此特定示例中,請勿使用>>。 它從文件中讀取格式化的數據。 無論使用
in.get(a[i][x]);
甚至更好的是,刪除您的char數組並將它們聲明為字符串,然后將它們放入動態容器中,比如說vector。
ifstream in("rules.txt");
vector<string> myLines;
while (!in.eof()) {
string temp;
getline(in,temp);
myLines.push_back(temp);
}
現在,將所有規則存儲在向量中的單獨字符串中。 將它們寫入文件也很容易。 當您使用for循環從0到40進行迭代,並且字符串的長度不超過40個字符時,您將獲得“ random ascii”。
默認情況下,提取運算符>>將忽略空格。 您可以按照其他答案中的建議讀取未格式化的數據,也可以更改以下默認行為:
in.open("rules.txt");
in >> noskipws;
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
in>>a[i][x];
}
}
第1部分
首先出來沒有空格
問題在這里
for(int x=0; x<39; x++){
out<<o[i][x];
}
您只寫入數據,並且不格式化輸出。
您有兩種可能的解決方案:
<iomanip>
並使用setw
和setfill
第二個選項的示例:
for(int x=0; x<39; x++) {
out << o[i][x] <<" ";
}
顯然,這還將在最后一個條目之后(或第一個條目之前)放置空格。 如果您不希望這樣做,則需要附加代碼。
第2部分
我最后得到一些隨機的ascii
問題(如其他人所述)在這里:
for(int i=0;i<3;i++){
for(int x=0; x<39; x++)
您可以隨意限制/增加輸出,而不必考慮必須寫入/讀取的變量的實際大小。
對於編寫(對於屏幕或文件來說,是相同的),您應該執行類似的操作(請注意,如果o
是向量的向量,而不是char數組,則這是一個解決方案。我不希望使用數組。)
for(int i=0;i<o.size();i++){
for(int x=0; x<o[0].size(); x++)
為了閱讀,您需要檢查是否要更改行和/或是否已到達文件末尾。
如果我沒記錯的話,每行末尾缺少/ n會阻止“自動換行”,並且全部出現在一行上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.