我正在尝试使用cin.getline()
函数获取带空格的字符串,但是当我这样做时,我的程序无休止地循环。
我添加了'\n'
,但它不起作用。
我真的不知道我做错了什么。有人可以帮忙吗?
#include <iostream>
using namespace std;
#include "HealthClub.h"
void main()
{
int i, ans=0;
char tname[20] = { 0 }, dname[20] = { 0 };
HealthClub newhc;
cout << "please enter the new trainer`s name:" << endl;
cin.getline(tname, 20, '\n');
newhc.addTrainer(tname);
}
答案 0 :(得分:0)
你有两个问题。
第一个已由cdonat
描述。想一想当你输入1
时会发生什么。
ans
是1。case 1
部分。while
条件。1
也许这甚至是期望的行为 - 我不知道。
你的第二个问题是getline
。 getline
不会从输入流中删除换行符。
当您致电cin >> ans;
时,剩余的换行符将用作触发器。
根据使用的C ++版本,cin>>
不会更改输入无效时写入的值。
由于您的输入流是单个换行符,因此不断将空字符串传递给ans
。因此ans
永远不会改变1
。
同样的行为也会导致getline
直接返回空字符串。
在调用getline
以删除/忽略剩余数据后,您需要清除输入流。
在cin.ignore();
之后添加对此cin.getline()
的电话
cin.getline(tname, 20, '\n');
cin.ignore();
答案 1 :(得分:-1)
while (ans != 7)
{
cin >> ans;
switch (ans)
{
case 1:
{
cout << "please enter the new trainer`s name:" << endl;
cin.getline(tname, 20, '\n');
newhc.addTrainer(tname);
}
break;
// ...
在这种情况下,您永远不会更改ans
。 ans
之后仍然是1,while循环刚刚重新开始并再次进入第一个语句。
它与getline()
没有任何关系。