C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过

C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过了,用cin.clear()也不行。求解答... C++,用cin获取一个数字,存入一个int型变量。当输入字母符号等非数字时,接下来的cin都跳过了,用cin.clear()也不行。求解答 展开
 我来答
帐号已注销
2016-01-07 · TA获得超过738个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:161万
展开全部

你好。你的要求是把输入的字母等非数字字符排除掉,然后只保存数字对吗?

比如输入: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;
}
zhiyyao
2016-01-07 · TA获得超过1910个赞
知道小有建树答主
回答量:645
采纳率:57%
帮助的人:396万
展开全部
#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;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式