我有一个终端应用程序,用户输入将其存储在字符串中,然后将其转换为int。问题是如果用户输入任何不是数字的内容,则转换失败并且脚本继续而没有任何迹象表明该字符串尚未转换。有没有办法检查字符串是否包含任何非数字字符。
以下是代码:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr); //gets user input
stringstream(mystr) >> price; //converts string: mystr to float: price
cout << "Enter quantity: ";
getline (cin,mystr); //gets user input
stringstream(mystr) >> quantity; //converts string: mystr to int: quantity
cout << "Total price: " << price*quantity << endl;
return 0;
}
在转换之前:stringstream(mystr) >> price;
如果字符串不是数字,我希望它在控制台上打印一行。
答案 0 :(得分:3)
通过检查输入流的int
位,您可以查看fail()
的读取是否成功:
getline (cin,mystr); //gets user input
stringstream priceStream(mystr);
priceStream >> price;
if (priceStream.fail()) {
cerr << "The price you have entered is not a valid number." << endl;
}
答案 1 :(得分:0)
如果你想检查价格用户输入是否是浮点数,你可以使用boost::lexical_cast<double>(mystr);
,如果它抛出异常,那么你的字符串不是浮点数。
答案 2 :(得分:0)
它会为你的代码添加一些内容,但你可以用cctype中的isdigit解析mystr。库的功能是here。如果字符串中的字符不是数字,则isdigit(mystr [index])将返回false。