getline没法给string类型的变量赋值

getline无法给string类型的变量赋值
getline没法给string类型的变量赋值
这个程序直接跳过了图片所示的那一步,请帮忙看一下是为什么,谢谢


# include <iostream>
 # include <stdlib.h>
 # include <string>
 using namespace std;
 int main()
 {
 int q;
 cout << "欢迎您使用本加密程序,若您使用,代表您同意本程序的规定,此程序仅供娱乐之用" << endl;
 cout << "您是否想继续运行本程序" << endl;
 cout << "0---退出程序" << endl;
 cout << "1--继续运行" << endl;
 LOOP:
 cout << "请您选择,输入指令所代表的字母" << endl;
 cin >> q;
 if (q == 1)
 cout << "感谢您的配合,现在我们继续运行程序" << endl;
 if (q == 0)
 {
 cout << "感谢您的使用,祝您生活愉快,再见" << endl;
 exit(0);
 }
 if (q != 0 && q != 1)
 {
 cout << "您的输入有误,请重新输入" << endl;
 goto LOOP;
 }
 string s1;
 cout << "请输入你想加密的文本" << endl;
 getline(cin, s1);
 cout << "您输入的文本为 " << endl;
 cout << s1 << endl;
 }
------解决思路----------------------
参考我的

http://blog.****.net/u010370871/article/details/48261979

http://blog.****.net/u010370871/article/details/48294433
------解决思路----------------------
前几天你刚提问过同样的问题。
cin从输入缓冲区中读取数据,当你输入数据并按下回车键时,你输入的数据和回车一并存入缓冲区。
就你这个程序来说,cin读取了输入的1,但缓冲区中还有数据——回车,而getline(cin, s1)这一句,
是遇到了回车直接结束并把缓冲区中的回车丢弃。所以你要在getline(cin, s1)这一句前面清空缓冲区。

------解决思路----------------------
       getline(cin,s1)用法本身没有问题。但是,在只有两个参数的情况下,getline函数缺省以回车键为字符串输入结束符。
在你输入“1回车”后,1被读入q,但是输入缓冲中仍然存在“回车符”。则调用getline时,getline遇到回车符认为字符串已经读取完毕并跳出函数,实际读入到s1为空。 这里想办法去掉输入缓冲中的“回车”即可,在getline函数前加一句cin.get()即可达到你的设计目的。
        为了鲁棒的输入,可以自定义结束符,例如自定义getline(cin,s1,'E')以‘E’为输入s1的截止符。需要注意的时,getline保证遇到截至符即停止,且会将截止符从输入缓冲中删除。

其它,关于字符串,字符数组,字符的赋值问题。可以参考我的博客:http://blog.****.net/qianhen123/article/details/19088839#t4