|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 SA突袭 于 2015-6-10 16:34 编辑
刚在看小甲鱼C++视频的第十五讲:不是每滴牛奶都叫特仑苏(构造器和析构函数讲解)
先上代码,然后来说下我的不解:
[qq]534737859[/qq]
- #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;
- }
复制代码
这是为什么那,我把你的代码直接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. |
|