c+中的字符串数组+;简单代码 这是我的完整程序,带有C++的DO while循环,它第一次运行正确,但是当它循环时它不能正常工作。

c+中的字符串数组+;简单代码 这是我的完整程序,带有C++的DO while循环,它第一次运行正确,但是当它循环时它不能正常工作。,c++,arrays,string,loops,do-while,C++,Arrays,String,Loops,Do While,该程序将名称存储到数组中并将其打印出来。数组大小是50,所以我想在数组中存储50个名称 任何帮助都将不胜感激。 谢谢 #包括 #包括 #包括 使用名称空间std; 无效启动(INTC); 字符串名称数组[50]; 字符响应; int main(){ 整数计数=1; 做{ 计数=计数-1; 开始(计数); cout>反应; 计数=计数+2; cout首先使用一个显式循环和中断,而不是一段时间,因为这可以避免缓冲区溢出并整理代码。我还从jxh的响应中添加了修复。类似这样的东西。(未测试) #包括 #

该程序将名称存储到数组中并将其打印出来。数组大小是50,所以我想在数组中存储50个名称

任何帮助都将不胜感激。 谢谢

#包括
#包括
#包括
使用名称空间std;
无效启动(INTC);
字符串名称数组[50];
字符响应;
int main(){
整数计数=1;
做{
计数=计数-1;
开始(计数);
cout>反应;
计数=计数+2;

cout首先使用一个显式循环和中断,而不是一段时间,因为这可以避免缓冲区溢出并整理代码。我还从jxh的响应中添加了修复。类似这样的东西。(未测试)

#包括
#包括
#包括
使用名称空间std;
无效启动(INTC);
字符串名称数组[50];
字符串响应;
int main(){

对于(int count=0;count,
cin>>响应将检索输入的一个字符,并在输入流中保留换行符。这将导致您的
start()
函数在提示输入您的姓名后立即返回,
getline()
将输入的空行返回到
NameArray

您也可以使用
getline()
以字符串形式检索响应,然后检查行的第一个
char

    //...
    cout << "do you want to add another name? ";
    std::string line;
    std::getline(std::cin, line);
    response = line[0];
    //...
/。。。

其他人提到了文体问题,但眼前的问题是:

  cout << "do you want to add another name? ";
  cin>> response;
  count = count + 2;      
  cout<< endl;        
} while (tolower(response)=='y');

伙计们把这件事弄得太复杂了。你第二次调用cin时,正在读取一个新行并立即返回。下面是最快的修复方法:在getline调用之前添加cin.ignore():

cin.ignore();
getline(cin, NameArray[count]);

一次又一次,不要说
使用namespace std;
!为什么从
计数=1;
开始,然后递减它?为什么不跳过这一步,在
cin>>响应之后的循环中的每个迭代中应用
计数++;
行?或者更好,在
开始中使用
静态int count=-1;count++;
e> 函数并跳过
main
中的
count
,这是一个非常糟糕的循环索引。从第一个数字(0)开始索引,并在添加输入后将其递增。索引只应在循环中的一个点递增/递减,且仅以+/-1递增/递减。这个问题似乎与主题无关,因为这样做不是转储代码的地方,比如说“它不起作用”,然后期待其他人神奇地免费为您完成所有修复工作。感谢alot spartygw,这非常有效-这正是我所需要的。如果用户键入“是”而不是“y”,以及其他类似
cin.ignore(INT\u MAX)的黑客攻击,这将不起作用
如果输入来自文件,则无法正常工作。感谢您对我的答案@Keyn Y-NWell进行向下投票,您试图使其过于简单。但失败了。感谢所有有共同想法的人,但ken Y-n和spartygw解决方案为我指明了正确的方向,这正是我所需要的。-因此,现在我将研究此问题。忽略()再来一些-谢谢。很好,它为你修好了!请别忘了。
    //...
    cout << "do you want to add another name? ";
    std::string line;
    std::getline(std::cin, line);
    response = line[0];
    //...
  cout << "do you want to add another name? ";
  cin>> response;
  count = count + 2;      
  cout<< endl;        
} while (tolower(response)=='y');
std::string response;

//...

  cout << "do you want to add another name? ";
  getline(cin, response);  // Changed here
  count = count + 2;      
  cout<< endl;        
} while (tolower(response[0])=='y'); // And changed here
cin.ignore();
getline(cin, NameArray[count]);