判断输入的数据是否是数字

千杯不醉-sen 2010-03-18 10:13:03
咋样判断输入的数据是数字,如果不是重新输入,比如123可以,2k或k就要求重新输入 。

cout<<"\n请输入第一个操作数:";
cin>>num;
while()
{
cout<<"\n输入错误,请重新输入:";
cin>>num;
}

while()里面有没有适当的函数来完成这个功能。
若有更好的方法,请指教哦!
...全文
1667 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
千杯不醉-sen 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 zhao4zhong1 的回复:]
引用 46 楼 yangsen600 的回复:
你试一下:1.e 什么时候可以找不出毛病呢?

如果你的意思是不忽略一个合法double数的后面内容的话:

C/C++ code

#include <stdio.h>
#include <conio.h>
void main() {
double db;
char c;

while (1) {
……
[/Quote]
你你你你你你你你你你你你你你你你你你你你你你谢谢谢谢谢谢谢谢谢你你
你你你你你你你你你你你你你你你你你谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢你
你你你你你你你你你你你你你你谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢你
你你你你你你你你你你谢谢谢谢你谢谢谢谢谢谢谢谢谢谢谢你你你你你你你
你你你你你你你谢谢谢谢谢谢谢你谢谢谢你你谢谢谢谢谢你你你你你你你你
你你谢谢谢谢谢谢谢谢谢谢谢谢你你你你你你谢谢谢谢你你你你你你你你你
谢谢谢谢谢谢谢谢谢谢谢谢谢谢你你你你你你谢谢谢谢你你你你你你你你你
谢谢谢谢谢谢谢谢谢谢谢谢你你你你你你你谢谢谢谢谢谢谢谢谢谢谢你你你
谢谢谢谢谢谢谢谢谢谢谢谢你你你你你你谢谢谢谢谢谢谢谢谢谢谢谢谢谢你
你谢谢谢谢谢谢谢谢谢谢你你你你你谢谢谢谢谢谢你你你谢谢谢谢谢谢谢你
你你你你你你你谢谢谢谢你你你你你谢谢谢谢你你你你你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你你谢谢你你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你你谢谢谢谢你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你你谢谢谢谢你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你你谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你你谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你谢谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你谢谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你谢谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢谢你谢谢谢谢你你谢谢谢谢谢你你
你你你你你你你谢谢谢谢你你你你谢谢谢你你谢谢谢谢你你谢谢谢谢谢你你
你谢谢你你你谢谢谢谢谢你你你你谢谢谢你你谢谢谢你你你谢谢谢谢谢你你
你谢谢谢谢谢谢谢谢谢谢你你你你你谢谢你你谢谢你你你你谢谢谢谢谢你你
你你谢谢谢谢谢谢谢谢谢你你你你你你你你谢谢谢你你你你你谢谢谢谢你你
你你你你谢谢谢谢谢谢谢你你你你你你你你谢谢谢你谢谢谢谢你你你你你你
你你你你你谢谢谢谢谢谢你你你你你你你谢谢谢谢你你谢谢谢谢谢你你你你
你你你你你你你你谢谢谢你你你你你你谢谢谢谢谢你你你谢谢谢谢谢谢谢你
你你你你你你你你你你你你你你你谢谢谢谢谢谢你你你你你谢谢谢谢谢谢你
你你你你你你你你你你你你你你谢谢谢谢谢谢你你你你你你谢谢谢谢谢谢谢
你你你你你你你你你你你你你谢谢谢谢谢你你你你你你你你你谢谢谢谢谢谢
你你你你你你你你你你你你谢谢谢谢谢你你你你你你你你你你你谢谢谢谢你
千杯不醉-sen 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 zhao4zhong1 的回复:]
引用 46 楼 yangsen600 的回复:
你试一下:1.e 什么时候可以找不出毛病呢?

如果你的意思是不忽略一个合法double数的后面内容的话:

C/C++ code

#include <stdio.h>
#include <conio.h>
void main() {
double db;
char c;

while (1) {
……
[/Quote]

谢谢啦!
这句话,我爱听!
“世界上不存在没有Bug的程序,只不过是比谁在同等条件下出的Bug少而已。”
赵4老师 2010-03-24
  • 打赏
  • 举报
回复
引用 46 楼 yangsen600 的回复:
你试一下:1.e 什么时候可以找不出毛病呢?

如果你的意思是不忽略一个合法double数的后面内容的话:

#include <stdio.h>
#include <conio.h>
void main() {
double db;
char c;

while (1) {
while (1) {
printf("\nInput a double number:");
fflush(stdin);
if (1==scanf("%lf",&db)) break;
else {
printf("Invalid double number! Please input again.\n");
}
}
if (1==scanf("%c",&c)) {
if ('\n'==c) {
printf("This is a valid double number:%lf\n",db);
break;
} else {
printf("Invalid double number! Please input again.\n");
}
} else {
printf("This is a valid double number:%lf\n",db);
break;
}
}
printf("Press any key to exit ...");
getch();
}

如果输入超过double类型所能表示数的最小,最大,精度的数请在此基础上再完善。
世界上不存在没有Bug的程序,只不过是比谁在同等条件下出的Bug少而已。
“我不用跑得比熊快,只要跑的比你快就可以了。”
jeam0402 2010-03-24
  • 打赏
  • 举报
回复
标记一下标记一下
千杯不醉-sen 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 zhao4zhong1 的回复:]
引用 38 楼 coolmicheal 的回复:
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。

double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。
所以正解只能是

C/C++ code
double db;
while (1) {
……
[/Quote]

你输一个字母试一下....
千杯不醉-sen 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 zhao4zhong1 的回复:]
楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。
[/Quote]

确实,还是有弊端啊.....
千杯不醉-sen 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 coolmicheal 的回复:]
int num;
while (!(cin>>num)||(cin.get()!='\n'))
{
cout << "error" << endl;
cin.clear();
cin.sync();
}
[/Quote]

不错啊!这样也可以~

cout << "请输入一个操作数:";
cin>>num;
while (!cin.good()||(cin.get()!='\n'))
{
cout << "请输入一个操作数:" << endl;
cin.clear();
cin.sync();
}
poooower 2010-03-23
  • 打赏
  • 举报
回复
是不是可以用正则表达式啊
千杯不醉-sen 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 zhao4zhong1 的回复:]
引用 46 楼 yangsen600 的回复:
引用 41 楼 zhao4zhong1 的回复:
引用 38 楼 coolmicheal 的回复:
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。

double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。……
[/Quote]
你试一下:1.e 什么时候可以找不出毛病呢?
千杯不醉-sen 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 zhao4zhong1 的回复:]
引用 46 楼 yangsen600 的回复:
引用 41 楼 zhao4zhong1 的回复:
引用 38 楼 coolmicheal 的回复:
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。

你试一下:1.e 什么时候可以找不出毛病呢?

double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。……
[/Quote]
z_berry 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 zhao4zhong1 的回复:]

引用 38 楼 coolmicheal 的回复:
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。

double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。
所以正解只能是
C/C++ code
double db;
while (1) {
……
[/Quote]
ym连scanf返回值表示什么意思都记得的牛人
lwnowhy 2010-03-23
  • 打赏
  • 举报
回复
不太懂
赵4老师 2010-03-23
  • 打赏
  • 举报
回复
引用 46 楼 yangsen600 的回复:
引用 41 楼 zhao4zhong1 的回复:
引用 38 楼 coolmicheal 的回复:
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。

double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。
所以正解只能是

……
你输一个字母试一下....
double db;
while (1) {
printf("\nInput a number:");
if (1==scanf("%lf",&db) break;
else {
fflush(stdin);
printf("Invalid number! Please input again.");
}
}
coolmicheal 2010-03-22
  • 打赏
  • 举报
回复
int num;
while (!(cin>>num)||(cin.get()!='\n'))
{
cout << "error" << endl;
cin.clear();
cin.sync();
}
coolmicheal 2010-03-22
  • 打赏
  • 举报
回复
int num;
while (!(cin>>num))
{
cout << "error" << endl;
cin.clear();
cin.sync();
}
forster 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 jansonleader 的回复:]

引用 15 楼 donntknow 的回复:

输入一个串,把它转换成一个数(atoi),然后再转换回来(sprintf)和原来的串比较(strcmp),如果相等就表示是数字

好想法!!!
但是atoi() 只能得到int型数,如果其他类型数字(float、double等),则无能为力...
[/Quote]

那输入根号2 之类的 更没法弄了。
jansonleader 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 donntknow 的回复:]

输入一个串,把它转换成一个数(atoi),然后再转换回来(sprintf)和原来的串比较(strcmp),如果相等就表示是数字
[/Quote]
好想法!!!
但是atoi() 只能得到int型数,如果其他类型数字(float、double等),则无能为力...
赵4老师 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 coolmicheal 的回复:]
引用 37 楼 zhao4zhong1 的回复:

楼上诸位请输入
+1.2e-3
验证一下你们写的代码吧。

貌似楼主没有这个要求。
[/Quote]
double类型输入时,如果没有这个要求还叫double类型输入吗?不如改叫定点小数输入吧。
所以正解只能是
double db;
while (1) {
printf("\nInput a number:");
if (1==scanf("%lf",&db) break;
else printf("Invalid number! Please input again.");
}

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
丈八涯 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 g_idea 的回复:]
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"输入数字:"<<endl;
char c;
long num = 0;
int bNum = 1;
bool firs……
[/Quote]
逻辑有错误,主要就是想通过getch来读取单个字符.回车也应该是13.
丈八涯 2010-03-22
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
cout<<"输入数字:"<<endl;
char c;
long num = 0;
int bNum = 1;
bool firstChar = true;

while ( (c = getch() ) != 23 )
{
cout<<c;
if( firstChar && c == '-' )
{
bNum = -1;
firstChar = false;
continue;
}
firstChar = false;
if(isdigit(c))
{
num = num*10 + (c-'0');
if(num > 1000000 )
{
num = 0;
bNum = 1;
firstChar = true;
cout<<endl<<"输入越界,重新输入:"<<endl;
}
}
else
{
if( c != 13 )
cout<<endl<<"输入有误,请重新输入数字:"<<endl;
else
{
cout<<endl;
break;
}
}
}
num *= bNum;

cout<<"输入的数字为:"<<num<<endl;
return 0;
}
加载更多回复(36)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧