c语言中如何完整的判断输入的字符串是浮点数(代码)
4个回答
展开全部
如果字符串已放在 char 数组 str[] 里,例如
char str[]="123.34.34";
double d;
if ( sscanf(str,"%lf",&d) != 1 ) printf("wrong floating data\n");
char str[]="123.34.34";
double d;
if ( sscanf(str,"%lf",&d) != 1 ) printf("wrong floating data\n");
追问
现输入 现判断的 没有放入数组中
追答
输入流里的内容本身都是字节流,天然地是“字符串”。
按 %lf 读入 就是转换为 浮点数,不符合浮点数规定的 “字符串”将导致 读的 失败,
符合浮点数规定的 “字符串”,读就能成功。所以 用 读 和 是否成功就可以判断了。
现键盘输入:
double d;
if ( scanf("%lf",&d) != 1 ) printf("wrong floating data\n");
现文件输入:
FILE *fin;
double d;
fin = fopen(.....); // 自己写全
if ( fscanf(fin,"%lf",&d) != 1 ) printf("wrong floating data\n");
2014-04-17
展开全部
最简单普遍的方法,循环 + 判断,编译器前端也常见此判断字符串的方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
enum SYMBOL
{
positive_, // 正数
negative_, // 负数
};
bool bIsDouble(const char *pSrc){
int nDot = 0;
int nFlag = 0;
const char *pTmp = pSrc;
SYMBOL symbol = positive_;
if('-' == *pTmp){
symbol = negative_;
pTmp++;
}
if('+' == *pTmp){
symbol = positive_;
pTmp++;
}
while('\0' != *pTmp){
// 假若找到小数点
if('.' == *pTmp){
if(nDot >= 1){
return false;
}
else{
nDot++;
pTmp++;
continue;
}
}
// 假若不为0-9之间的值,就不是double类型
if(*pTmp < '0' || *pTmp > '9'){
return false;
}
pTmp++;
}
return true;
}
int main()
{
char szInput[256]="";
while('q' != szInput[0]){
printf("Input string:");
scanf("%s",szInput);
if(bIsDouble(szInput)){
printf("是浮点数\n\n");
}else{
printf("不是浮点数\n\n");
}
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-04-17
展开全部
要优化或你遇到的串有什么特殊划律要优化就另说,手机党代码无力
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询