C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过
C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过了,用cin.clear()也不行。求解答...
C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过了,用cin.clear()也不行。求解答
展开
2个回答
展开全部
你好。你的要求是把输入的字母等非数字字符排除掉,然后只保存数字对吗?
比如输入:3df55d,然后排出掉dfd,只保存355,以保证输入的正确性。
#include <iostream>
#include <math.h>
using namespace std;
/*
功能:把一个用字符串表示的整数转换为
int类型的整数。如有字符创char* chrPt = "213";
转换后为int num = 213;
算法:(3 * 10的0次方) + (1 * 10的1次方)+ (2 * 10的2次方)
这个算法要求chrPt指向"213"字符串的尾部,即指向"3"。
注意:这个函数会把用户输入的非数字字符排除掉,这是重点!
*/
int InputInt(char* chrPtNumber)
{
char* chrPt;
int number = 0;
int x = 0; //幂初始化为0,x范围从0到4。因为int类型整数最大只有五位数
cout<<"请输入一个小于等于5位数的int整数: ";
cin>>chrPtNumber;
//功能和strlen()一样,求字符长度,即让指针跑到尾部
for (chrPt = chrPtNumber; *chrPt; chrPt ++)
{ } //空循环体
/* 如果输入264,那么先把4加进去,然后再60,再200,即需要倒序
所以前面让指针chrPt指向尾部,以便倒序保存每一位数字
*/
for (-- chrPt; chrPt > chrPtNumber; chrPt --)
{
//如果是数字就保存下来
if (*chrPt >= '0' && *chrPt <= '9')
{
number += (*chrPt - '0') * int(pow(10, x ++));
}
}
/* chrPt不能和chrPtNumber相等,因为相等后,chrPt便是首地址了;
chrPt--:首地址再往前跑一个便超出范围了。
所以第一个数组元素不能放在循环里面,要拿出来单独处理
*/
if (*chrPt >= '0' && *chrPt <= '9')
{
number += (*chrPt - '0') * int(pow(10, x));
}
return number;
}
int main()
{
char chr1Number[20];
int num = InputInt(chr1Number);
cout<<"你输入的整数是: "<<num<<endl;
return 1;
}
展开全部
#include <iostream>
using namespace std;
void main()
{
int n;
char ch;
cout << "输入一个整数: ";
cin >> n;
while (!cin)
{
while ((ch = getchar ()) != '\n')
continue;
cout << "输入的不是数字,重新输入: ";
cin.clear ();
cin >> n;
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询