SA突袭 发表于 2015-6-10 10:49:49

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

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

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

先上代码,然后来说下我的不解:
534737859
#include <iostream>
#include <string>
#include <fstream>

class StoreQuote
{
public:
      std::string quote, speaker;
      std::ofstream fileOutput;
      
      StoreQuote();
      ~StoreQuote();
      
      void inputQuote();
      void inputSpeaker();
      bool write();      
};

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

StoreQuote::~StoreQuote()
{
      fileOutput.close();
}

void StoreQuote::inputQuote()
{
      std::getline(std::cin, quote);
}

void StoreQuote::inputSpeaker()
{
      std::getline(std::cin, speaker);
}

bool StoreQuote::write()
{
      if( fileOutput.is_open() )
      {
                fileOutput << quote << "|" << speaker << "\n";
                return true;
      }
      else
      {
                return false;
      }
}

int main()
{
      StoreQuote quote;
      
      std::cout << "请输入一句名言:\n";
      quote.inputQuote();
      
      std::cout << "请输入作者:\n";
      quote.inputSpeaker();
      
      if( quote.write() )
      {
                std::cout << "成功写入文件^_^";
      }
      else
      {
                std::cout << "写入文件失败T_T";
                return 1;
      }
      
      return 0;
}

http://xxx.fishc.com/forum/201506/08/223536g3nll52z53uoulzf.png



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

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

小人 发表于 2015-6-10 11:23:18

本帖最后由 小人 于 2015-6-10 11:24 编辑

里面要求你输入   名言和作者两个而你只输入名言 而差一个作者 {:9_240:}

Victory_6226 发表于 2015-6-10 12:31:45

我用的VS2010没有lz的提出的问题啊

SA突袭 发表于 2015-6-10 15:30:05

Victory_6226 发表于 2015-6-10 12:31
我用的VS2010没有lz的提出的问题啊

我用的我VC6.0

SA突袭 发表于 2015-6-10 15:30:53

SA突袭 发表于 2015-6-10 15:30
我用的我VC6.0

我个人觉得是编译平台的问题,不过我也不大清楚,你可以用vc6.0试试

SA突袭 发表于 2015-6-10 15:54:54

小人 发表于 2015-6-10 11:23
里面要求你输入   名言和作者两个而你只输入名言 而差一个作者

不是这个问题,是VC6.0上的getlinebug,你自己百度,一大堆

小人 发表于 2015-6-10 15:57:27

SA突袭 发表于 2015-6-10 15:54
不是这个问题,是VC6.0上的getlinebug,你自己百度,一大堆

知道是vc6 的问题就不要用vc6 了    {:9_240:}

SA突袭 发表于 2015-6-10 15:58:13

Victory_6226 发表于 2015-6-10 12:31
我用的VS2010没有lz的提出的问题啊

事vc6.0的getline 函数的bug

SA突袭 发表于 2015-6-10 16:15:15

小人 发表于 2015-6-10 15:57
知道是vc6 的问题就不要用vc6 了

但我还是有问题。,麻烦你再看看
页: [1]
查看完整版本: 小甲鱼C++视频的一个问题