- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解这段代码
istream &read(istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
ostream &print(ostream &os, const Sales_data &item)
{
os << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return os;
}
我不明白这些函数是什么,也不明白为什么我们使用 istream
进行读取,使用 ostream
进行打印,而不是使用 cin
Và cout
.
1 Câu trả lời
为了理解 đọc
Và in
函数中发生的情况,您需要了解一些微妙之处。从概述的角度来看,istream
Và ostream
是通用输入和输出类,为 C++ 中的流 I/O 提供基础。正如其他答案和评论正确指出的那样, std::cin
Và std::cout
源自 istream
Và ostream
code> 提供来自标准流 tiêu chuẩn
Và đầu ra chuẩn
的输入/输出。
流本身有一个状态,用于确定流是否良好并且可以读取或写入,或者是否发生流错误以防止进一步的 I/O(有些故障可以恢复,有些则不能)请参阅 std::basic_ios::rdstateVà std::basic_ios::setstate有关构成流状态的位(goodbit、badbit、failbit、eofbit
)的讨论。
现在看看你的函数原型(prototype):
istream &read(istream &is, Sales_data &item)
Và
ostream &print(ostream &os, const Sales_data &item)
注意第一个参数是对当前流的引用吗?并注意返回如何也是对同一流的引用吗?这很重要,因为它传递了对流的引用,因此函数内发生的任何 Steam 状态更改都将在返回时可用。因此,如果在 đọc
函数中遇到 eof
,则状态更改将在返回时可用。对于您的 in
函数也是如此(尽管会更改流的潜在错误更少且不同)
hiện hữu đọc
中,您从流中读取 3 条信息:item.bookNo、item.units_sold
Và giá
并更新item.revenue
:
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
您可以通过将其作为 là
的参数传递来读取 std::cin
,也可以传递一个打开的文件流。流操作适用于任何有效的流。
print 函数则相反,它输出 item.isbn()、item.units_sold、item.revenue
的返回值以及 item.avg_price()
的返回值> 作为输出。如果将 std::cout
BẰNG hệ điều hành
两个函数中的最后一个命令都会返回流,包括流状态中的任何更改,以便调用者可以检查Đọc
还是打印
那是成功的。这是调用者能够确定 I/O 是否发生的关键。
过于简化的示例
一个过度简化的示例来练习该函数可能有助于理解概念。这里我们声明一个简化的结构体Sales_data
,其中包含int bookno,units_sold;
Vàdoubleprice ,收入;
Ví dụ:
#include
struct Sales_data
{
int bookno, units_sold;
double price, revenue;
};
然后,我们简化đọc
,仅读取bookno、units_sold
Vàgiá
,并计算其收入
单个项目,例如
std::istream &read(std::istream &is, Sales_data &item)
{
is >> item.bookno >> item.units_sold >> item.price;
item.revenue = item.price * item.units_sold;
return is;
}
并简化in
以仅输出units_sold
Và收入
:
std::ostream &print(std::ostream &os, const Sales_data &item)
{
os << "units sold: " << item.units_sold << " revenue: $" << item.revenue << '\n';
return os;
}
现在您可以看到以一种非常简单的方式提示用户输入bookno、units_sold
Vàgiá
如何读取
Vàin
函数的工作原理,以及其中一个函数中发生的错误如何改变流状态。一个简短的 chủ yếu()
可能是:
int main (void) {
Sales_data sd;
std::cout << "enter bookno units_sold price: ";
if (read (std::cin, sd)) /* if read succeeds */
print (std::cout, sd); /* print data */
khác
std::cerr << "error: invalid input\n";
}
示例使用/输出
$ ./bin/readprintstream
enter bookno units_sold price: 12 100 12.95
units sold: 100 revenue: $1295
或者如果发生错误:
$ ./bin/readprintstream
enter bookno units_sold price: 23 banannas 12.28
error: invalid input
希望讨论和示例有助于澄清这个概念。如果您还有其他问题,请告诉我。
关于c++ - 使用 istream 参数读取的 istream 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60255516/
#include sử dụng không gian tên std; lớp C{ riêng tư: int giá trị; công khai: C(){ giá trị = 0;
Câu hỏi này đã có câu trả lời: Sự khác biệt giữa char a[] = ?string?; và char *p = ?string?;? là gì? (8 câu trả lời) Đã đóng
đóng cửa. Câu hỏi này cần có thông tin chi tiết hoặc rõ ràng. Hiện tại không chấp nhận câu trả lời. Bạn có muốn cải thiện câu hỏi này không? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này. Đã đóng 7 năm trước. Bài viết này đã 8 tháng tuổi
Ngoài việc gỡ lỗi, có công cụ kiểm tra nào cho c, c++ hoặc c# hoạt động giống như sao chép và dán một hàm độc lập vào một hộp văn bản nào đó rồi nhập tham số vào các hộp văn bản khác không? Câu trả lời hay nhất Có lẽ bạn sẽ cân nhắc đến thử nghiệm đơn vị. Tôi khuyên bạn nên dùng Google Test và Google Mock
Tôi muốn di chuyển một cửa sổ (HWND) trên màn hình thứ hai. Vấn đề là tôi đã thử nhiều cách như tăng gấp đôi độ phân giải hoặc nhập giá trị âm nhưng nó vẫn không thể đặt cửa sổ trên màn hình thứ hai của tôi. Bất kỳ manh mối nào về cách thực hiện điều này trong C/C++/C# sẽ hữu ích nhất
Tôi đang tìm kiếm các triển khai hiện có của các loại DES khác nhau trong C/C++/C##. Nền tảng hệ điều hành của tôi là Windows XP/Vista/7. Tôi đang cố gắng viết một chương trình C# có thể mã hóa và giải mã bằng thuật toán DES. Tôi cần một số thực sự
Thật khó để biết nên hỏi gì ở đây. Câu hỏi này mơ hồ, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập trung tâm trợ giúp. Đóng 1
Có cách nào để buộc một cửa sổ khác phải ở trên cùng không? Không phải cửa sổ ứng dụng mà là một cửa sổ khác đang chạy trên hệ thống. (Windows, C/C++/C#) Câu trả lời hay nhất: SetWindowPos(that_window_ha
Giả sử bạn được lựa chọn giữa C/C++ hoặc Csharp và bạn dự định chạy nhiều phiên bản của cùng một máy chủ trên cả máy chủ Windows và Linux, thì lựa chọn thông minh nhất để xây dựng ứng dụng máy chủ socket là gì? Câu trả lời tốt nhất là
Bạn có thể cho tôi biết sự khác biệt giữa chúng không? Nhân tiện, có thứ gì được gọi là thư viện C++ hay thư viện C không? Câu trả lời hay nhất: Thư viện chuẩn C++ và Thư viện chuẩn C là các thư viện được định nghĩa bởi các chuẩn C++ và C và được cung cấp để các chương trình C++ và C sử dụng. Đó là những điểm chung của những từ đó
Mã kiểm tra bên dưới, tôi đưa thông tin đầu ra vào phần bình luận. Tôi đang sử dụng gcc 4.8.5 và Centos 7.2. #include #include lớp C { công khai:
Thật khó để biết câu hỏi ở đây là gì. Câu hỏi này mơ hồ, không rõ ràng, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Khách hàng của tôi sẽ giao tiếp với khách hàng khác bằng cách sử dụng một cấu trúc/lớp gọi là annoucement. Tôi nghĩ tôi sẽ viết máy chủ bằng C++. Sẽ có nhiều lớp khác nhau kế thừa annoucement. Vấn đề của tôi là gửi các lớp này qua mạng đến máy khách. Tôi nghĩ có lẽ tôi nên sử dụng
Tôi có hàm sau trong C#: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
Tôi có một dự án trong đó tôi phải viết một hàm để làm gì đó với dữ liệu. Tôi có thể viết mã bằng C/C++ nhưng tôi không muốn chia sẻ mã hàm với công ty của mình. Thay vào đó, tôi chỉ muốn trao cho anh ta quyền gọi hàm đó trong mã của riêng anh ta. Có thể được không? Tôi nghĩ đến hai cách tiếp cận -
Tôi đang sử dụng API của bên thứ 3 (C/C++) được viết kém. Tôi sử dụng nó từ mã được quản lý (C++/CLI). Đôi khi có thể xảy ra "Lỗi vi phạm quyền truy cập". Việc này sẽ làm toàn bộ ứng dụng bị sập. Tôi biết tôi không thể xử lý những lỗi này [nếu con trỏ truy cập vào vị trí bộ nhớ bất hợp pháp, v.v.,
đóng cửa. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Hiện tại câu hỏi này không chấp nhận câu trả lời. Chúng tôi không chấp nhận những câu hỏi tìm kiếm lời khuyên về sách, công cụ, thư viện phần mềm, v.v. Bạn có thể chỉnh sửa câu hỏi để có thể trả lời bằng các sự kiện và trích dẫn. Đã đóng cửa cách đây 7 năm.
Đã đóng. Câu hỏi này không đáp ứng được hướng dẫn của Stack Overflow. Hiện tại không chấp nhận câu trả lời. Các câu hỏi yêu cầu chúng tôi đề xuất hoặc tìm một công cụ, thư viện hoặc tài nguyên ngoài trang web yêu thích là không phù hợp với Stack Overflow vì
Tôi có một số mã C sẽ được gọi từ C# bằng cách sử dụng P/Invoke. Tôi đang cố gắng định nghĩa một hàm C# tương đương cho hàm C này. SomeData* DoSomething(); cấu trúc SomeData {
Câu hỏi này đã có câu trả lời: Tại sao các cấu trúc này lại sử dụng hành vi không xác định trước và sau khi tăng dần? (14 câu trả lời) Đã đóng 6
Tôi là một lập trình viên xuất sắc, rất giỏi!