设为首页 加入收藏

TOP

1.3 第一个程序(1)
2013-10-07 13:17:56 来源: 作者: 【 】 浏览:64
Tags:1.3 一个 程序

1.3 第一个程序(1)

工具安装配置完毕之后就可以开始了。首先启动文本编辑器或者C++(www.cppentry.com) IDE,并且创建第一个工程或者创建一个新文件。将文件命名为list0101.cpp,这个名字是代码清单1-1的简称。C++(www.cppentry.com)程序有几个流行的文件扩展名,我喜欢用.cpp,p代表"plus"(加)。其他常见的扩展名是.cxx和.cc。一些编译器把.C(大写C)也识别为C++(www.cppentry.com)文件扩展名,但不推荐这样使用,因为.c(小写c)是C程序的默认扩展名,.C和.c太容易混淆了,而且许多桌面环境不区分文件名的大小写,这会使问题更加复杂化。选择你喜欢的扩展名然后要一直坚持使用。输入代码清单1-1中的文本。(你可以从本书网站下载书中列出的所有代码,除了代码清单1-1,因为我希望你可以借此适应一下在自己的文本编辑器中输入C++(www.cppentry.com)代码。)

代码清单1-1 第一个 C++(www.cppentry.com)程序

  1. /// 把标准输入按照字母表顺序进行排序。  
  2. /// 逐行读取文本,进行排序,并且把结果打印到标准输出。  
  3. /// 如果命令行输入了一个文件名,则从该文件中读入。否则,
    从标准输入读入。所有的输入都保存在内存中,  
  4. /// 所以不要用超过可用RAM大小的文件来测试这个程序。  
  5. #include <algorithm> 
  6. #include <fstream> 
  7. #include <iostream> 
  8. #include <iterator> 
  9. #include <ostream> 
  10. #include <string> 
  11. #include <vector> 
  12.  
  13. void read(std::istream& in, std::vector<std::string>& text)  
  14. {  
  15.    std::string line;  
  16.    while (std::getline(in, line))  
  17.        text.push_back(line);  
  18. }  
  19.  
  20. int main(int argc, char* argv[])  
  21. {  
  22.    // 第一部分 把所有输入读入text,如果命令行输入
    一个文件名,则读取那个文件,否则读取标准输入。  
  23.    std::vector<std::string> text;///< 把行文本保存在这里  
  24.    if (argc < 2)  
  25.      read(std::cin, text);  
  26.    else  
  27.    {  
  28.       std::ifstream in(argv[1]);  
  29.       if (not in)  
  30.       {  
  31.          std::perror(argv[1]);  
  32.          return EXIT_FAILURE;  
  33.       }  
  34.       read(in, text);  
  35.    }  
  36.  
  37.    // 第二部分 对text进行排序  
  38.    std::sort(text.begin(), text.end());  
  39.  
  40.    // 第三部分 打印排序后的text  
  41.    std::copy(text.begin(), text.end(),  
  42.              std::ostream_iterator<std::
    string
    >(std::cout, "\n"));  

其中的一些代码很可能让你费解。不过没关系,这个练习的目的不是理解C++(www.cppentry.com),而是让你能够正确使用你的工具。从程序注释中可以看出,这个程序实现了简单的排序功能。虽然我也可以用一个"Hello,world"类型的小程序开始,但那种程序仅仅涉及C++(www.cppentry.com)语言和库的很小一部分。这个程序虽然复杂了些,但是能够更好地揭示你的工具可能存在的安装或者其他方面的问题。

现在回过头去,仔细检查你的源代码。确保输入了正确内容。

你确实仔细检查程序了吗?

你发现错误的输入了吗?

人非圣贤,孰能无错。出现输入上的错误并不是什么丢面子的事。我们都会犯这样的错误,回过头重新检查你的程序。

现在编译程序。如果你正在使用某个IDE,找到Compile或者Build按钮或者菜单项。如果正在使用命令行工具,也要确保编译后能够链接程序。由于历史(或者雷死的 )原因,UNIX工具,比如g++,通常会产生一个a.out的可执行程序。你需要将它重命名为更有用的名字,或者使用-o选项来命名输出文件。表1-2列出了Visual C++(www.cppentry.com)和g++的命令行示例。

表1-2 编译list0101.cpp的命令行示例

编 译 器< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

命 令 行

Visual C++(www.cppentry.com)

cl /EHsc /Za list0101.cpp

g++

g++ -o list0101 –pedantic

–ansi list0101.cpp

如果编译出错了,那么可能有以下原因:源代码输入错误;没有正确安装编译器、链接器或者C++(www.cppentry.com)库;编译器、链接器或者库不遵循C++(www.cppentry.com)标准而不适用于本书。再三检查确保正确地输入了文本。如果你确信错误在于工具而不是你自己,检查发行版本的日期。如果工具是在1998年之前发行的,马上别用了。它们早于标准的制定,所以不可能符合标准。实际上,在过去几年中,C++(www.cppentry.com)工具的质量已经有了飞跃式的发展,所以我建议不要使用任何早于2005年发行的工具。如果工具是最近的却还是出错,可能就需要重新安装了。

如果所有以上的尝试都失败了,那就换一套不同的工具集。下载当前发行的GCC或者Visual Studio Express。即使你工作中不得不回去使用那些顽固的、生疏的、老旧的工具,但是在学习本书时可能需要这些新版工具。

能够成功编译并不代表可以成功运行。如何调用程序取决于操作系统。在GUI环境中,需要一个控制台或者终端窗口来输入行命令。可能需要输入可执行文件的完整路径,或者仅仅需要输入程序名,这也取决于操作系统。当运行程序时,它从标准输入流读取数字,也就是说不管你输入什么,程序都会读取它,然后通过按表示文件结束的神奇键,来通知程序输入已经完成--在大部分类UNIX的操作系统上,按Control+D;在Windows上,按Control+Z。

在IDE中运行控制台应用程序有时候比较复杂。如果不够细心,IDE可能会在你还没有机会看到任何输出之前关闭程序的窗口。你要保证窗口可见。一些IDE(比如Visual Studio和KDevelop)会自动为你做这些,在它关闭窗口之前,会提示按回车键关闭窗口。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.3 第一个程序(2) 下一篇1.1.1 Windows平台

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: