鱼C论坛

 找回密码
 立即注册
查看: 2363|回复: 8

小甲鱼C++视频的一个问题

[复制链接]
发表于 2015-6-10 10:49:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 SA突袭 于 2015-6-10 16:34 编辑

刚在看小甲鱼C++视频的第十五讲:不是每滴牛奶都叫特仑苏(构造器和析构函数讲解)

先上代码,然后来说下我的不解:
[qq]534737859[/qq]
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>

  4. class StoreQuote
  5. {
  6. public:
  7.         std::string quote, speaker;
  8.         std::ofstream fileOutput;
  9.         
  10.         StoreQuote();
  11.         ~StoreQuote();
  12.         
  13.         void inputQuote();
  14.         void inputSpeaker();
  15.         bool write();        
  16. };

  17. StoreQuote::StoreQuote()
  18. {
  19.         fileOutput.open("test.txt", std::ios::app);
  20. }

  21. StoreQuote::~StoreQuote()
  22. {
  23.         fileOutput.close();
  24. }

  25. void StoreQuote::inputQuote()
  26. {
  27.         std::getline(std::cin, quote);
  28. }

  29. void StoreQuote::inputSpeaker()
  30. {
  31.         std::getline(std::cin, speaker);
  32. }

  33. bool StoreQuote::write()
  34. {
  35.         if( fileOutput.is_open() )
  36.         {
  37.                 fileOutput << quote << "|" << speaker << "\n";
  38.                 return true;
  39.         }
  40.         else
  41.         {
  42.                 return false;
  43.         }
  44. }

  45. int main()
  46. {
  47.         StoreQuote quote;
  48.         
  49.         std::cout << "请输入一句名言:\n";
  50.         quote.inputQuote();
  51.         
  52.         std::cout << "请输入作者:\n";
  53.         quote.inputSpeaker();
  54.         
  55.         if( quote.write() )
  56.         {
  57.                 std::cout << "成功写入文件^_^";
  58.         }
  59.         else
  60.         {
  61.                 std::cout << "写入文件失败T_T";
  62.                 return 1;
  63.         }
  64.         
  65.         return 0;
  66. }
复制代码


                               
登录/注册后可看大图




这是为什么那,我把你的代码直接copy过来的
getline函数,但是我输入的是字符串,他是按回车结束,也就是回车没有被getline接受,而被字符串接受了。我第一次要按2次回车才可以,这是为什么呀。
为什么小甲鱼视频中的只需要一下回车
如果在我的函数里多添加一个这个
  1. void StoreQuote::inputSpeaker()
  2. {   char x;
  3.         x=std::cin.get();
  4.         std::cout<<int(x)<<std::endl;
  5.         std::getline(std::cin, speaker);
  6. }
复制代码

x输出的是他的asicll码,是10,我看了是换行符,这又是为什么
文件里的内容就正常,不过还是要输入2次回车!!
我觉得我知道答案,
首先我们第一次输入字符串的回车是字符串结束的标记,
通过debug也证明第一次回车,getline并未结束。然后第二次回车是
才是getline默认结束的标记,所以才有第二次回车才结束。
而结束后,在流里就有字符串+回车+回车
而getline读取到第一个回车就把他抛弃(既不放回输入流也不放在字符串里),然后就剩下一个回车在输入流里。
我们用cin.get()
从输入流中读取一个字符。就是我们的回车的10进制码,所以就是10.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-10 11:23:18 | 显示全部楼层
本帖最后由 小人 于 2015-6-10 11:24 编辑

里面要求你输入   名言和作者两个  而你只输入名言 而差一个作者
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-10 12:31:45 | 显示全部楼层
我用的VS2010没有lz的提出的问题啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 15:30:05 | 显示全部楼层
Victory_6226 发表于 2015-6-10 12:31
我用的VS2010没有lz的提出的问题啊

我用的我VC6.0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 15:30:53 | 显示全部楼层

我个人觉得是编译平台的问题,不过我也不大清楚,你可以用vc6.0试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 15:54:54 | 显示全部楼层
小人 发表于 2015-6-10 11:23
里面要求你输入   名言和作者两个  而你只输入名言 而差一个作者

不是这个问题,是VC6.0上的getline  bug,你自己百度,一大堆
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-6-10 15:57:27 | 显示全部楼层
SA突袭 发表于 2015-6-10 15:54
不是这个问题,是VC6.0上的getline  bug,你自己百度,一大堆

知道是vc6 的问题就不要用vc6 了   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 15:58:13 | 显示全部楼层
Victory_6226 发表于 2015-6-10 12:31
我用的VS2010没有lz的提出的问题啊

事vc6.0的getline 函数的bug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-10 16:15:15 | 显示全部楼层
小人 发表于 2015-6-10 15:57
知道是vc6 的问题就不要用vc6 了

但我还是有问题。,麻烦你再看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-20 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表