Vấn đề là C++ là một ngôn ngữ gõ tĩnh, có nghĩa là nếu một cái gì đó được khai báo là string
, đó là một chuỗi, và nếu một cái gì đó được khai báo là double
, đó là một đôi. Không giống như các ngôn ngữ khác như JavaScript hoặc PHP, không có cách nào để tự động chuyển đổi từ chuỗi thành giá trị số vì chuyển đổi có thể không được xác định rõ. Ví dụ: nếu bạn thử chuyển đổi chuỗi "Hi there!"
thành double
, thì không có chuyển đổi có ý nghĩa. Chắc chắn, bạn có thể chỉ cần đặt double
thành 0.0 hoặc NaN, nhưng điều này gần như chắc chắn sẽ che giấu thực tế rằng có sự cố trong mã.
Để khắc phục điều này, không đệm nội dung tệp vào chuỗi. Thay vào đó, chỉ cần đọc trực tiếp vào double
:
double lol;
openfile >> lol;
này đọc giá trị trực tiếp như một số thực, và nếu một lỗi xảy ra sẽ gây phương pháp của dòng .fail()
trở thành sự thật. Ví dụ:
double lol;
openfile >> lol;
if (openfile.fail()) {
cout << "Couldn't read a double from the file." << endl;
}
thể trùng lặp của [String trong khoa học ký hiệu C++ để chuyển đổi kép] (http://stackoverflow.com/questions/1710447/string-in-scientific-notation- c-to-double-conversion) –
Điều này về cơ bản là một bản sao với sự khác biệt duy nhất mà bạn thậm chí không cần phải đi qua giai đoạn chuỗi, vì bạn có thể đọc trực tiếp vào gấp đôi. –
Khi bạn chuyển 'char' thành' int', bạn sẽ nhận được mã của ký tự chứ không phải là "giá trị" của nó. Nói cách khác, 'int x = '0';' đặt 'x' thành' 48' (nếu bạn đang ở miền địa phương tương thích ASCII), không phải '0'. –