C编码:只读取带小数的浮点数,拒绝整数和特殊字符

2024-03-11

我正在尝试用 C (gcc) 编写代码以仅接受带小数的浮点数并拒绝整数、特殊字符、字母数字条目。

有效条目是:

1.23, 3.45, 6.77

无效条目:

abc, e34, 834ww, 6, 9,

还有一些不是浮动的废话。 这是我尝试过的:

#include <stdio.h>

int main()
{    
    double floatnum;
    double decpart=0.000000;
    printf("Enter a floating number num: ");

    while (decpart == 0.0000000)
    {
         scanf("%lf", &floatnum);
         int intpart = (int)floatnum;
         double decpart = floatnum - intpart;
         if (decpart == 0.000000){
             printf("Invalid floating point number, enter again: ");
         }
         else
         {
             printf("Number entered = %.2f\n", floatnum);
             break;
         } 
    }
    return 0;
}

我不需要确切的代码,但我需要一些关于实现这一目标的最佳方法的指针/线索。


我修改了你的代码,删除了scanf部分并用以下组合替换它fgets and strtod.

已完成检查:

  • 输入的有效数字(通过检查 endptr 是否返回strtod上的点linefeedchar,意味着整个输入的字符串已被正确解析):避免无效的数字和形式,例如42.4xxxx被接受atof例如
  • 如果在单个数字后添加尾随空格,则它会被换行符替换,从而被程序接受
  • 您的十进制检查代码,未更改
  • 该程序让数字像12.455e+1 pass (124.55),也许这是一个feature而不是一个错误,因为它作为浮点数有效。

固定代码:

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

int main()
{
    double decpart;
    printf("Enter a floating number num: ");
    char buf[100];
    int len;
    char *endptr;

    while (fgets(buf,sizeof(buf),stdin) != NULL)
    {
        len = strlen(buf)-1;

        // right strip spaces (replace by linefeed like fgets ends the input)
        while (len>0)
        {
            len--;
            if (buf[len]==' ')
            {
                buf[len]='\n';
            }
            else
            {
                break;
            }
        }

        double floatnum = strtod(buf,&endptr);

        if ((endptr==buf)||(endptr[0]!='\n'))
        {
            printf("Invalid floating point number, enter again: ");
        }
        else
        {
            int intpart = (int)floatnum;
            double decpart = floatnum - intpart;
            if (decpart == 0.000000){
                printf("Invalid floating point number, enter again: ");
            }
            else
            {
                printf("Number entered = %.2f\n", floatnum);
                break;
            } 
        }
    }
    return 0;
}

tests:

Enter a floating number num: no
Invalid floating point number, enter again: 45
Invalid floating point number, enter again: 45.6xxx
Invalid floating point number, enter again: 45.6
Number entered = 45.60
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C编码:只读取带小数的浮点数,拒绝整数和特殊字符 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span

随机推荐

  • 使用 NumberFormat 或 DecimalFormat

    在大多数情况下 我们如何证明合理性 何时使用 NumberFormat getInstance 我们什么时候使用 new DecimalForamt 如果要指定数字的格式 则必须使用 DecimalFormat 构造函数 如果您想要 大多数
  • 读取“文件”对象的内容?

    所以我有一个 文件 对象 通过处理从桌面拖放文件来检索 我可以使用ajax将文件发送到服务器 然后将它们返回给javascript来处理它们 但不做这一切就可以阅读它的内容吗 在这里 玩弄这个小提琴 http jsfiddle net jc
  • 查找接口实例背后的具体类型

    长话短说 我有一个 C 函数 它对作为对象实例传入的给定类型执行任务 当传入类实例时 一切正常 但是 当对象被声明为接口时 我真的很想找到具体的类并对该类类型执行操作 这是普遍存在的错误示例 例如不正确的属性大小写等 public inte
  • 如何在 GWT UIBinder 模板中重新设置 SplitLayoutPanel 拖动器的样式

    谁能告诉我如何更改 Split LayoutPanel 的 UIBinder 模板中匕首的样式 这是我的 MainMenu ui xml
  • 使用 geom_vline 在多个面的密度图中插入平均线

    对于下面的数据集 我想使用密度图来比较以下变量的两种性别的分布 withdraw affect 和 estress 这些图还应包含描述每个性别变量平均值的垂直线 并绘制在具有不同方面的同一图形上 我当前的代码如下 但是我不知道如何使用 ge
  • 更改存储库 URL 后 Capistrano 部署失败

    我通过 Git 存储库中的 capistrano 进行了简单的部署 起初 我从 GitHub 进行部署 一切正常 但后来我将存储库移至 BitBucket 现在我得到了 fatal Could not parse object 9cfb 一
  • 使用嵌入 API 谷歌分析设置 API 密钥

    我正在使用 embed api 用我的谷歌分析数据渲染地图 function w d s g js fs g w gapi w gapi g analytics q ready function f this q push f js d c
  • 如何在 Python 和 web3.py 中获取 Solidity 恢复/需要错误原因

    我正在努力抓住要求 交易恢复时出错 但我得到了交易的哈希值 我正在使用web3 py def addParticipants request web3 Web3 HTTPProvider settings Blockchain IP add
  • 使用有限的数据寻找多边形的中心

    我正在实施 Voronoi 曲面细分 然后进行平滑 为了平滑 我打算做劳埃德松弛 但我遇到了一个问题 我使用以下模块来计算 Voronoi 边 https bitbucket org mozman geoalg src 5bbd46fa22
  • NHibernate 异常:无法初始化集合,列名无效。流畅的映射。也许是多对一的问题?

    我对通过 NHibernate 遇到的异常感到困惑和沮丧 对于这篇文章的篇幅 我深表歉意 但我已尝试提供适当的详细信息来充分解释该问题 以获得一些帮助 事实如下 我有一个Person包含属性的类BillingManager 这也是一个Per
  • 是否有用于阻塞 boost::asio TCP 连接的 boost::iostreams (双向)设备?

    我正在调查可移植的 C 库 阻止对文件系统和网络的 I O 访问 它looks like boost filesystem boost iostreams and boost asio将由他们三人共同完成这项工作 需要明确的是 我目前对异步
  • 在 Winforms (C#) 中使用 MVP 模式的后台工作程序

    我一直在尝试使用 MVP 模式重构应用程序的意大利面条代码 但现在我正在为此苦苦挣扎 具有调用 DoWork 方法 后台工作者 的按钮的表单 这是一个很长的操作 我的问题是 如果我将长操作从视图移到演示器中 那么如何将此操作的进度更改发送到
  • 在线更新C#程序

    问候 如果这个问题已经被问过 我很抱歉 我尝试过使用搜索功能 但找不到适合我情况的答案 我有一个真正简单的 C 表单应用程序 只有 1 个文件 一个 exe 我目前通过 4shared 分发了此内容 人们可以随意下载 然而 每次我对程序进行
  • Matplotlib 颜色图 – 为每个图形/线条/主题选择不同的颜色

    我创建了一个读取并绘制 txt 文件及其内容 数字 值 的脚本 每个 txt 文件位于不同的文件夹中 每个文件夹又代表数据来源的一个主题 这段代码工作正常 Python 读取每个 txt 文件并将 23 个单独的图形 线条绘制成一个图 Py
  • jQuery 验证代码如何工作

    我发现这个教程使用 jQuery 和验证插件来验证表单输入 请参阅此处的工作示例 http jsfiddle net nK7Pw http jsfiddle net nK7Pw 这似乎工作正常 但是我有一个问题 在html部分中 没有提到错
  • Rails 4 更新嵌套属性

    更新嵌套属性附加而不是更新有很多关系 我正在尝试使用 Rails 4 Update attributes Class Person
  • Xamarin 表单 MessagingCenter 取消订阅未按预期工作

    当我在应用程序中多次来回导航时 MessagingCenter Subscribe 内编写的功能会被多次调用 但每次在订阅之前 我都会在构造函数中取消订阅 如下所示 但它仍然不起作用 MessagingCenter Unsubscribe
  • 提交表单后JQuery发送post请求?

    你好朋友 这是我的代码 用于表单提交 然后发送帖子链接 但表单提交成功 然后不发送帖子链接 document getElementById pitch image path form submit function e post submi
  • 应替换现有类型,添加新类型

    我有一个基地std vector和一个std initializer list
  • C编码:只读取带小数的浮点数,拒绝整数和特殊字符

    我正在尝试用 C gcc 编写代码以仅接受带小数的浮点数并拒绝整数 特殊字符 字母数字条目 有效条目是 1 23 3 45 6 77 无效条目 abc e34 834ww 6 9 还有一些不是浮动的废话 这是我尝试过的 include