我用C ++编写了一个非常简单的计算器程序。这是:
#include <iostream>
#include <string>
using namespace std;
int main()
{
double num1;
double num2;
string op;
double num3;
int x;
bool y = false;
do
{
cout<<"Press t to terminate the application"<<endl;
cout<<"Enter the first number"<<endl;
cin>>num1;
cout<<"Enter the operator"<<endl;
cin>>op;
cout<<"Enter the next number"<<endl;
cin>>num2;
if(op=="/"&&num2==0)
{
cout<<"You are attempting to divide by 0. This is impossible and causes the destruction of the universe. However, the answer is infinity"<<endl;
y = true;
}
if(y==false)
{
if(op=="+") {
num3 = num1+num2;
}
else if(op=="-") {
num3 = num1-num2;
}
else if(op=="*"||op=="x"||op=="X") {
num3 = num1*num2;
}
else {
num3 = num1/num2;
}
cout<<endl;
cout<<endl;
cout<<"Answer:"<<num3<<endl<<endl;
}
} while(x!=12);
return 0;
}
如您所见,我希望允许人们通过按't'来终止应用程序。这显然不起作用,因为cin
会尝试为double
分配一个字母(如果我按't'应用程序崩溃)。我打算用字符串来获取输入,但是我如何测试字符串是字母还是数字?
答案 0 :(得分:4)
#include <cctype>
并对字符串内容使用isalhpa()
,isdigit()
,isalnum()
?
答案 1 :(得分:1)
以下是示例和工作代码,只需更改它以满足您的需求
#include <iostream>
#include <string>
#include <cctype>
#include <stdlib.h>
using namespace std;
bool isNum(char *s) {
int i = 0, flag;
while(s[i]){
//if there is a letter in a string then string is not a number
if(isalpha(s[i])){
flag = 0;
break;
}
else flag = 1;
i++;
}
if (flag == 1) return true;
else return false;
}
int main(){
char stingnum1[80], stringnum2[80];
double doublenum1, doublenum2;
cin>>stingnum1>>stringnum2;
if(isNum(stingnum1) && isNum(stringnum2)){
doublenum1 = atof(stingnum1);
doublenum2 = atof(stringnum2);
cout<<doublenum1 + doublenum2 << endl;
}
else cout<<"error";
return 0;
}
答案 2 :(得分:0)
您可以输入一个字符串,然后使用以下函数:
int atoi ( const char * str );
如果字符串是数字,则会将其转换为整数。
如果字符串不是数字,它将返回0:在这种情况下,您只能检查字符串的第一个字符,如果它为零,则将输入视为0.如果第一个字符不是零认为字符串不是数字。
答案 3 :(得分:0)
好吧,如果你只检查't',你就可以做到愚蠢而简单。
if(stringnum1== 't' || stringnum2== 't') {
//terminate
}
else {
doublenum1 = atof(stringnum1)
doublenum2 = atof(stringnum1)
// your math operations
}
更好的方法是:
if(isalhpa(stringnum1) || isalpha(stringnum2)){
//terminate
}
else {
doublenum1 = atof(stringnum1)
doublenum2 = atof(stringnum2)
// your math operations
}
P.S。
如果你想测试字符串而不是char,这里是样本:link最好的方法是使函数测试给定的字符串是否为数字如果是数字返回true,否则返回false(或其他方式)