c+中的字符串数组+;简单代码 这是我的完整程序,带有C++的DO while循环,它第一次运行正确,但是当它循环时它不能正常工作。
该程序将名称存储到数组中并将其打印出来。数组大小是50,所以我想在数组中存储50个名称 任何帮助都将不胜感激。 谢谢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的响应中添加了修复。类似这样的东西。(未测试) #包括 #
#包括
#包括
#包括
使用名称空间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]);