C++ Primer 第1章

第1章-开始

cin的缓冲区

std::cin >> v1;输入6<Enter>,其中空格、回车、TAB等被认为是结束条件,“结束”是指从缓冲区刷新到内存,也就是交给程序去执行,cin会识别这些标志,然后丢掉它们。
比如输入6 7<Enter>,因为6后面有空格,所以6会被从缓冲区刷新到程序,赋给v1,而7会被留在缓冲区,等待下次调用cin时,cin查看到缓冲区有数据,就不会从外界输入,而是直接从缓冲区读取7,见下面这个例子。

std::cin >> v1 >> v2;输入6 7时,6被赋给了v1,7被赋给了v2。这个代码等价于(std::cin >> v1) >> v2;或者std::cin >> v1; std::cin >> v2;因为缓冲区还有7 (Enter),cin就会直接读取,故v2为7。

文件结束符

UNIX和Mac下键盘输入文件结束符(EOF):ctrl+d,Windows下:ctrl+z。有关这个的使用,可以见下面例子:

int sum = 0, value = 0;
while (std::cin >> value)
	sum += value;
std::cout << "Sum is: " << sum << std::endl;

输入3 4 5 6 (ctrl+d),然后回车;程序输出Sum is: 18。第2行的while循环条件的false条件为EOF,像Enter等因为是缓存区刷新标志,而且cin会自动忽略这些标志,不做处理,所以不会使while判断语句为false。
除了EOF,也可以输入一个无效的输入,比如要求输入int,可以输入个字符,就会自动判定为结束。

文件重定向

比如已经编译结束gcc test.cpp -o test生成test执行文件,我们不光可以从键盘上输入数据,也可以从文件中输入,将结果保存到文件中。test < inputfile > outputfile

循环

for循环也可以这样写:

for(Sales_item item; cin >> item; cout << item << endl) {
	sum_item += item;
}

其中cin >> item作为判断条件,当输入EOF或无效字符时为false,循环结束。而第3部分也可以不对变量做操作,如i++等,而只是打印输出等显示语句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章