首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于C++ Primer 的问题 [已结贴,结贴人:yeliguo12345]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 22:53:42 楼主
    英文版第八页:
      Programmers often insert print statements during debugging。 Such statements should always flush the
    stream。Forgetting to do so may cause output to be left in the buffer if the program crashes,leading to incorrect inferences about where the program carshed。
    谁能举例说明一下或者详细解释一下。
      manipulator has the effect of writing a newline to the output and flushing the buffer associate with that device。这句也不是太理解,endl能换行我知道,但是flushing the buffer associate with that device
    这句我不是太明白,不是他的意思而是怎么工作的。
    第十九页:
      #include <iostream>
      int main()
      {
        int sum=0,value;
        while(std::cin>>value)//这句怎么解释std::cin>>value返回的是std::cin怎么来判断是真还是假啊,
          sum+=value;
        std::cout < <"Sum is: " < <sum < <std::endl;
        return 0;
      }
    第二十一页:
      Compilers usually aren't picky about header file names,but IDEs sometimes are.这句话怎么理解(不是翻译)谁能详细解释一下或举下例吗? 
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 22:59:521楼 得分:8
    建议还是先看中文版的

    flush的意思是:对于输入流,读入所有缓冲中的内容,对于输出流,则把输出流中的内容都送到目的地flushing the buffer associate with that device ,就是把这个设备上的缓冲完全请出去。诸如,流不一定是屏幕和键盘,例如文件流,flush可能就是把输出缓冲写入到文件这个device中去

    cout/cin的类型是iostream_withassignment吧?这种类型重载了operator bool,只要有错误,就返回false,所以if(!cin)表示if(!cin.fail())

    第三个问题:例如文件名中包含中文,有时编译器不care,IDE就care,因为IDE显示文件名可能对中文有bug。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iu_81
    • 等级:
    发表于:2008-07-23 23:01:222楼 得分:2
    std::cin >> value 是永远都不会为false
    ctrl + Z为false
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:01:303楼 得分:1
    不要逐字逐句的读,这种教科书不要指望读一遍什么都会了,要从大局上去理解,不要去扣字眼。你程序写多了,自然就会了,扣字眼有时候只会浪费实际,例如你第三个问题,你弄明白了又如何?谁又会给自己的文件起稀奇古怪的名字(除非一些超级庸手)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:02:444楼 得分:3
    绝对了吧?键盘电路出问题怎么办?有人用程序发一些错误的指令怎么办?内存访问越界破坏了cin的内部数据结构怎么办?
    引用 2 楼 iu_81 的回复:
    std::cin >> value 是永远都不会为false
    ctrl + Z为false
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:03:585楼 得分:1
    你先看一下中文版吧,看英文的很吃力。并且有些东西你会不懂,我刚开始就是看的英文版,程序虽然可以写出
    但有好多的概念我都不懂。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:04:426楼 得分:1
    引用 2 楼 iu_81 的回复:
    std::cin >> value 是永远都不会为false
    ctrl + Z为false


    还有楼主觉得英文太费劲,可以找本中文的对照看,可能会好点。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:05:547楼 得分:0
    何必和自己过不去呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-23 23:17:358楼 得分:10
    Programmers often insert print statements during debugging. Such statements should always flush the stream. Forgetting to do so may cause output to be left in the buffer if the program crashes, leading to incorrect inferences about where the program crashed.

    程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。
    flushing the buffer associate with that device。应该是刷新缓冲区的意思。
    if(!cin)来检查对错。
    类类型存储在一个文件中,其文件名如同程序的源文件名一样,由文件名和文件后缀两部分组成。通常文件名和定义在头文件中的类名是一样的。通常后缀是 .h,但也有一些程序员用 .H、.hpp 或 .hxx。编译器通常并不挑剔头文件名,但 IDE 有时会。
    看来你还是不怎么理解,书上说的什么。如果你要中英互译的电子书,我有,给我你的电子邮箱。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 00:13:339楼 得分:0
    我不是英文看不懂好不,只是有些地方不理解,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 00:16:3410楼 得分:0
    下次还是用中文说好了,我的意思是对这些话不是很理解,并不是翻译不来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 11:25:1111楼 得分:0
    我不是问翻译:
    比如这个程序
    #include <iostream>
      int main()
      {
        int sum=0,value;
        while(std::cin>>value)//这句怎么解释std::cin>>value返回的是std::cin怎么来判断是真还是假啊,
          sum+=value;
        std::cout < <"Sum is: " < <sum < <std::endl;
        return 0;
      }
    我用了ctrl + Z但是为什么要按两次即在屏幕上显示ctrl^z ctrl^z后按enter才显示结果,按个人理解用该ctrl^Z就显示出结果啊,
    还有endl能刷新缓冲区:
      我是这样理解的,例如我从键盘输入一串字符或者在显示器上显示一串字符,那么是将这串字符先送到缓冲区,然后在送到显示器或者文件里对吧,用了endl就把把缓冲区清空。可以这样理解吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wacy999
    • 等级:
    发表于:2008-07-24 12:46:2312楼 得分:2
    这段程序的作用是把你输入的数据全加至sum,定义的value是int型的 当你输入不是int型的数据 而是字符串或其他,按enter的时候即停止循环,如输入的全是数据则一直循环相加。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:32:4413楼 得分:3
    比如cerr
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:43:4414楼 得分:1
    学习中!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 13:58:4215楼 得分:4
    int value;
    while(std::cin>>value)

    不一定要Ctrl+Z,随便输入一个非数字,如字母,符号等,就可以结束循环。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-24 14:12:3816楼 得分:4
    引用 15 楼 e_sharp 的回复:
    int value;
    while(std::cin>>value)

    不一定要Ctrl+Z,随便输入一个非数字,如字母,符号等,就可以结束循环。



    正解
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved