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
这个程序直接跳过了图片所示的那一步,请帮忙看一下是为什么,谢谢
# 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