我在學校學習C++,在我看來這是一種美麗的語言,但我有這個煩人的問題。在文本書中,它的編寫方式是FILE *text
和scanf
和printf
,我個人不喜歡它;我習慣了cin
和cout
或與<<
>>
更好地說與fstream
。C++讀寫二進制模式
因此,這裏是我的問題:
我不得不做出這樣的二進制模式(我已經做它的一半,但它不能在二進制模式寫某種原因寫入數據的應用程序)
在我寫出城市(orasul)座標(x和y)之後,我必須搜索它們並獲取這些值。 (在這裏我試圖使用
string.find
),但我必須使用seekg
來搜索「二進制模式」,並在結構中分離這些值。
如果你們能引導我以某種方式導致我迷失在這裏。有沒有辦法我可以得到sizeof(struct)
?
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <limits>
using namespace std;
struct oras {
std::string orasul;
int x;
int y;
} ora;
void functiaPrincipala();
void calculator(float coordonate_x1, float coordonate_y1, float coordonate_x2, float coordonate_y2);
void adaugaOras();
void stergeLocatie();
void repetare();
void main() {
functiaPrincipala();
}
void functiaPrincipala() {
// variabile
int obtiune;
// ofstream fisierOut;
// ifstream fisierIn;
cout << "1) Adauga localitate: " << endl;
cout << "2) Stergerea unei localitati existente: " << endl;
cout << "3) Stergerea tuturor localitatilor existente: " << endl;
cout << "4) Afisarea tuturor localitatilor existente: " << endl;
cout << "5) Calculul distantei a doua localitati: " << endl;
cout << "Introduceti obtiunea: " << endl;
cin >> obtiune;
switch (obtiune) {
case 1:
adaugaOras();
break;
case 2:
stergeLocatie();
break;
case 3:
break;
case 4:
break;
case 5:
break;
}
getch();
}
void calculator(float coordonate_x1, float coordonate_y1, float coordonate_x2, float coordonate_y2) {
float rezultat;
rezultat = sqrt((coordonate_x2 * coordonate_x1) - (coordonate_x2 * coordonate_x1) + (coordonate_y2 * coordonate_y1) - (coordonate_y2 * coordonate_y1));
cout << "Distanta de la orasul 1 la orasul 2 este de: " << rezultat;
}
void adaugaOras() {
int n;
ofstream fisierOutt("textttt.txt", ios::app | ios::binary);
// fisierOutt.open("textttt.txt");
cout << "Cate orase doresti sa introduci: ";
cin >> n;
if (fisierOutt.is_open()) {
for (int i = 0; i < n; i++) {
cout << "Introdu numele orasului: ";
cin >> ora.orasul;
cout << "Introdu coordonatele x: ";
cin >> ora.x;
cout << "Introdu coordonatele y: ";
cin >> ora.y;
fisierOutt << ora.orasul << " " << ora.x << " " << ora.y << endl;
cout << endl << endl;
}
} else {
cout << "Nu am putut deschide fisierul";
}
fisierOutt.close();
cout << endl;
// repetare();
}
void stergeLocatie() {
}
void repetare() {
char obtiune;
cout << "Doriti sa mai adaugati ceva sau sa iesiti?(d/n)";
cin >> obtiune;
if (obtiune == 'd') {
functiaPrincipala();
} else {
exit;
}
}
由於條目大小可變,因此您無法輕鬆查找特定條目。如果文件中的所有條目具有固定大小,則很容易。 – 2013-03-17 10:03:56
「P.S有沒有辦法讓我輸入代碼更容易,然後按空格四次?」是的,只需粘貼它,選擇它,然後單擊「{}」按鈕。 – Thomas 2013-03-17 10:09:07
非常感謝您的幫助。老師告訴我,有一種方法,我得到的結構(sizeof(ora)的大小,之後,我使用seekg找到它...但問題是我不能寫它 – 2013-03-17 10:54:56