我是c ++的新手,我试图解决Bjarne Stroustrups书中的第4章练习6"编程原则和练习使用C ++并且不明白为什么我的代码不起作用。
练习:
制作一个包含十个字符串值的向量"零","一个",..., " 9&#34 ;.在将数字转换为数字的程序中使用它 相应的拼写值:例如,输入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;
}
答案 0 :(得分:1)
当您(成功)从std::cin
读取输入时,输入从缓冲区中提取。缓冲区中的输入被删除,无法再次读取。
当你第一次以字符串形式阅读时,它也会将任何可能的整数输入读作字符串。
有两种方法可以解决这个问题:
答案 1 :(得分: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>