[关闭]
@CrazyHenry 2018-01-23T13:14:23.000000Z 字数 1184 阅读 1289

1.x 使用文件重定向

ccccC++Primer


使用文件重定向:
image_1btrq30iv10141v1q19kq1tsf1rdk5o.png-171.6kB

  1. #include <iostream>
  2. #include "Sales_item.h"
  3. int main()
  4. {
  5. Sales_item item1, item2;
  6. std::cin >> item1 >> item2; //read a pair of transactions
  7. std::cout << item1 + item2 << std::endl; //print their sum
  8. return 0;
  9. }

image_1btrr9e1n17bk112f1pdgf3j1s886i.png-9.2kB

编译之后,执行可执行文件:

$ ./bobo.exe <item >itemresult

image_1btrs0j9vv7s1i5pfiek5ss2q7p.png-6.1kB

image_1btrru5sr1ggm15891utg1d8d1pa16v.png-122.5kB

image_1btrrujroec8ad2frg1rcj17ob7c.png-35.2kB

image_1btrs1870l71rd01sgpgakj5i96.png-4.8kB

将书店item增加空格和回车试试:

image_1btrsi9ojje7ts2rjph518cbk.png-5.8kB

结果:

image_1btrsk6091krtcujtq61e63788ch.png-5.3kB

image_1btrsksf3104dkn2133p1jpo1hp2cu.png-8.4kB
结果:

image_1btrsleqg137481n235gi31j8odb.png-5.6kB

输入失效实际上是检测cin对象的状态,对于文件来说,这种状态也是类似的。比如我的文件里 7 7 4 + 8 9,读取到+号,则cin对象失效,结束读取,继续执行剩余的代码,再之后的8和9就忽略了。

回车和空格不算是输入错误,这应该是输入流的一种机制,用于判断输入的每一个条目信息。

在控制台上输入,即使已经输入错误或者输入结束符,也必须手动回车才能显式的结束输入(实际早就结束了);而对于文件读取,只要遇到结束符或者输入错误,即刻结束输入。

比如:

  1. #include <iostream>
  2. int main()
  3. {
  4. // prompt user to enter two numbers
  5. std::cout << "Enter two numbers:" << std::endl;
  6. int v1 = 0, v2 = 0;
  7. std::cin >> v1 >> v2;
  8. std::cout << "The sum of " << v1 << " and " << v2
  9. << " is " << v1 + v2 << std::endl;
  10. return 0;
  11. }

这个程序只读取两个数据,多余的都会被忽略,只不过在控台输入最终必须敲回车才能体现出来。
image_1btt2oetn6b21muqo8l1cc11r4g9.png-13.9kB

下面用前面的int型数字的输入做个试验:

  1. #include <iostream>
  2. int main()
  3. {
  4. int sum = 0, value = 0;
  5. // read until end-of-file, calculating a running total of all values read
  6. while (std::cin >> value)
  7. sum += value; // equivalent to sum = sum + value
  8. std::cout << "Sum is: " << sum << std::endl;
  9. return 0;
  10. }

image_1btrs9hcad4017thm7cbu5v8s9j.png-3.4kB

image_1btrsbbum1q04f461pb8me3qala0.png-64.2kB

image_1btrsc5gbtohcji1udtkc4orcad.png-5kB

再换一个item例子:

image_1btrseiiqism162f85t1q8s8bnaq.png-5kB

image_1btrsfeqq51u1hcgibh1an81sv3b7.png-4.7kB

结束符该怎么输入呢?还不是很清楚。有一点可以确定,文件是自带结束符的,不用显式写出,程序在读到最后一行就结束读取了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注