不知道用户输入的个数,需要不断读取数据直至用户停止输出为止.
程序实现
int value;
int sum = 0;
while(std::cin >> value){
sum+=value;
}
std::cout<<sum<<std::endl;
return 1;
这里std::cin >> value
运算返回的是std::cin
对象,该对象在作为条件时,能检测流的状态.
如果检测成功,则为真;如果遇见文件结束符或者无效输入,则该状态会变为无效,为假.
键盘输入的文件结束符
win: ctrl + z
unix, mac ox: ctrl + d
书店计数程序demo
#include "Sales_item.h"
#include <iostream>
int main() {
Sales_item total;
if (std::cin >> total) {
Sales_item temp;
while (std::cin >> temp) {
if (total.isbn() == temp.isbn()) {
total += temp;
} else {
std::cout << total << std::endl;
total = temp;
}
}
std::cout << total << std::endl;
} else {
std::cerr << "error, no data" << std::endl;
return -1;
}
return 0;
}
使用文件重定向
重复输入是非常乏味的,这时可以使用文件重定向
./程序名 < 含有输入信息的文件 > 输出文件
例子
输入文件 book_sale
0-201-70353-X 4 24.99
0-201-82470-1 4 45.39
0-201-88954-4 2 15.00
0-201-88954-4 5 12.00
0-201-88954-4 7 12.00
0-201-88954-4 2 12.00
0-399-82477-1 2 45.39
0-399-82477-1 3 45.39
0-201-78345-X 3 20.00
0-201-78345-X 2 25.00
使用文件重定向
./bookshop < ./data/book_sale > log.txt
运行该代码后,可以得到输出记录文件log.txt
0-201-70353-X 4 99.96 24.99
0-201-82470-1 4 181.56 45.39
0-201-88954-4 16 198 12.375
0-399-82477-1 5 226.95 45.39
0-201-78345-X 5 110 22