c语言中如何完整的判断输入的字符串是浮点数(代码)

我请分析下,c语言中如何完整的判断输入的字符串是浮点数(代码)?

输入的字符串有可能是 123.34.34 或者123a.3 12.a3,,希望是具体代码,谢谢
最新回答
近水楼台

2024-10-16 05:24:42

如果
字符串
已放在 char 数组 str[] 里,例如
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");
た靑木知湫ッ

2024-10-16 06:56:29

最简单普遍的方法,循环 + 判断,编译器前端也常见此判断字符串的方法
Cunese-红玫瑰*

2024-10-16 06:12:56

#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;
}

祁梦

2024-10-16 05:23:55

要优化或你遇到的串有什么特殊划律要优化就另说,手机党代码无力