繁体   English   中英

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

[英]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;
}

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

而且,当您初次读取为字符串时,这还将读取所有可能的整数输入作为字符串。

有两种解决方法:

  1. 尝试读取为int 第一 如果失败,则清除错误并读取为字符串。

  2. 读取为字符串,然后尝试转换int 如果转换失败,则您有一个字符串。

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> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM