[英]c++ if(cin>>input) doesn't work properly in while loop
我是C ++的新手,我正试图解决Bjarne Stroustrups一书“使用C ++的编程原理和实践”第4章中的练习6,并且不理解为什么我的代码不起作用。
练习:
制作一个包含十个字符串值“零”,“一个”,...,“九”的向量。 在将数字转换为其相应的拼写值的程序中使用该字符:例如,输入7给出输出7。 使用相同的程序,使用相同的输入循环,将拼写的数字转换为数字形式; 例如,输入7给出输出7。
我的循环只对一个字符串执行一次,对一个int执行一次,该循环似乎继续,但是我给出的输入并不重要,它没有执行应做的事情。
一次它可以用于多个int输入,但仅每秒钟一次。 这真的很奇怪,我不知道如何以其他方式解决这个问题。
如果有人可以帮助我,那将是非常棒的。 (我也不以英语为母语,对不起,如果有一些错误)
这段代码中的库是随书提供的一个库,我想这对我们来说很简单。
#include "std_lib_facilities.h"
int main()
{
vector<string>s = {"zero","one","two","three","four","five","six","seven","eight","nine"};
string input_string;
int input_int;
while(true)
{
if(cin>>input_string)
{
for(int i = 0; i<s.size(); i++)
{
if(input_string == s[i])
{
cout<<input_string<<" = "<<i<<"\n";
}
}
}
if(cin>>input_int)
{
cout<<input_int<<" = "<<s[input_int]<<"\n";
}
}
return 0;
}
if(cin >> input)
在while循环中不能正常工作?
程序输入的可能实现如下所示:
std::string sentinel = "|";
std::string input;
// read whole line, then check if exit command
while (getline(std::cin, input) && input != sentinel)
{
// use string stream to check whether input digit or string
std::stringstream ss(input);
// if string, convert to digit
// else if digit, convert to string
// else clause containing a check for invalid input
}
例如,要区分int
和string
值,可以使用peek() 。 优选地,转换的最后两个动作(在int
和string
之间)由单独的函数完成。
假设包含标题:
#include <iostream>
#include <sstream>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.