c ++ if(cin>> input)在while循环中无法正常工作

时间:2017-03-27 10:47:23

标签: c++ if-statement while-loop user-input cin

我是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;
}

2 个答案:

答案 0 :(得分:1)

当您(成功)从std::cin读取输入时,输入从缓冲区中提取。缓冲区中的输入被删除,无法再次读取。

当你第一次以字符串形式阅读时,它也会将任何可能的整数输入读作字符串。

有两种方法可以解决这个问题:

  1. 尝试首先阅读int 。如果失败clear错误并以字符串形式读取。

  2. 以字符串形式阅读,并尝试convertint。如果转换失败,则会有一个字符串。

答案 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
}

要区分intstring值,您可以使用peek()。 最后两个转换操作(intstring之间)最好由不同的函数完成。

假设包含标题:

#include <iostream> 
#include <sstream>