2014-03-30 36 views
0

是否有可能,比如你想要做计算,所以主变量类型可能是int ...但作为程序的一部分,你决定做一个while循环,并为现有目的抛出一个if语句。 你有一个CIN >>那就是采取一些运行计算,但你还需要一个输入柜面他们想退出:如何使输入采取字符串和int? C++

下面是一些代码

#include <iostream> 

using namespace std; 


int func1(int x) 
{ 
    int sum = 0; 
    sum = x * x * x; 
    return sum; 
} 

int main() 
{ 
    bool repeat = true; 

    cout << "Enter a value to cube: " << endl; 
    cout << "Type leave to quit" << endl; 

    while (repeat) 
    { 
     int input = 0; 
     cin >> input; 
     cout << input << " cubed is: " << func1(input) << endl; 

     if (input = "leave" || input = "Leave") 
     { 
      repeat = false; 
     } 

    } 
} 

我的工作米意识到他们不会请假造成输入设置为int,但它是可以使用转换或东西...

另一件事是有一个更好的方式来打破循环或者是最常用的方法是什么?

+2

为什么不',而(真)'和'break'? –

回答

2

您可以从输入流中读取输入字符串。检查它是否是“假”,并退出..而且如果不尝试将其转换为一个号码并拨打电话FUNC1 ..看的atoi或升压:: lexical_cast的<>

也实在是input == "leave"==是平等的运营商。 =是一个赋值操作符。

int main() { 
    cout << "Enter a value to cube: " << endl; 
    cout << "Type leave to quit" << endl; 

    while (true) 
    { 
     string input; 
     cin >> input; 

     if (input == "leave" || input == "Leave") 
     { 
      break; 
     } 
     cout << input << " cubed is: " << func1(atoi(input.c_str())) << endl; 

    } 
} 
+0

atoi函数可能会返回一个无效的int数据,如果您传递像“abc”或“abc123”这样的字母数字字符串 – rajenpandit

3

一种方法是从cin读取一个字符串。检查它的值。如果满足退出条件,退出。如果不是,从字符串中提取整数并继续处理整数。

while (repeat) 
{ 
    string input; 
    cin >> input; 
    if (input == "leave" || input == "Leave") 
    { 
     repeat = false; 
    } 
    else 
    { 
     int intInput = atoi(input.c_str()); 
     cout << input << " cubed is: " << func1(intInput) << endl; 
    } 
} 
2

您可以像使用

int input; 
string s; 
cint>>s; //read string from user 
stringstream ss(s); 
ss>>input; //try to convert to an int 
if(ss==0)  //not an integer 
{ 
     if(s == "leave") {//user don't want to enter further input 
      //exit 
     } 
     else 
     { 
       //invalid data some string other than leave and not an integer 
     } 
} 
else 
{ 
     cout<<"Input:"<<input<<endl; 
      //input holds an int data 

}