如何防止 scanf 失败导致无限循环

2023-12-02

该代码应该可以换一美元并且运行良好。但教授说他将随字母一起输入随机数字。它可以很好地处理数字,但是当输入字母时会出现无限循环,有什么建议吗?

#include <stdio.h>
#include <stdlib.h>
#define amtPaid 1
#define SENTINAL -1
int quarters(int numChange);
int dimes(int numChange);
int nickels(int numChange);
int pennies(int numChange);

int main(void)
{
    double amtDue = 0; // how much is paid


while(1){
    printf("\nPlease enter the price less than 1 dollar: ");
    scanf(" %lg", &amtDue);
    int changeReturn = (amtPaid - amtDue) * 100 + 0.5; // convert decimal to whole number
    int updated = 0;    // remaining change after amt of change
    int numberQuarters = quarters(changeReturn); // number of quarters needed

   if(changeReturn >= 0 && changeReturn <= 100){ // if changereturn  is between 0 and 100 execute code

        printf("\nNice!");
        printf("\nWe owe you %i cents" , changeReturn);
        if(numberQuarters >= 0){    // get and print number of quarters
            printf("\nQuarters: %i", numberQuarters);
            updated = changeReturn % 25;
        }
        if(dimes(updated) >= 0){ // get and print number of dimes
            printf("\nDimes: %i", dimes(updated));
            updated = updated % 10;
        }
        if(nickels(updated)>= 0){ // get and print number of nickels
            printf("\nNickels: %i", nickels(updated));
            updated = updated % 5;
        }
        if(pennies(updated) >= 0){ // get and print number pennies
            printf("\nPennies: %i", pennies(updated));
        }

    }

    else if(amtDue == SENTINAL){
        break;
    }

    else {
        printf("That does not make sense to me. please type a valid number");
    }

    printf("\n %g", amtDue);

}
return 0;
}

int quarters(int numChange){
    int numQuarters = 0;

    numQuarters = numChange / 25;

    return numQuarters;
}
int dimes(int numChange){
    int numDimes = 0;

    numDimes = numChange / 10;

    return numDimes;
}
int nickels(numChange){
    int numNickels = 0;

    numNickels = numChange / 5;

    return numNickels;
}
int pennies(numChange){

    return numChange;
}

如果提供的值不是格式说明符的预期值,则使用scanf(), the scanf()将会失败并且不合适的值将会remain在输入缓冲区中,提供feed到下一个scanf(),只会导致连续失败。在这种情况下,您需要clean up在进行下一个输入之前输入缓冲区。你可以使用类似的东西

  1. 检查返回值scanf()
  2. 如果出现故障,请使用while( getchar() != '\n' );清理输入缓冲区。

也就是说,int nickels(numChange) is now invalid in c (C99向前)。你必须把它做成int明确地。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 scanf 失败导致无限循环 的相关文章

  • 为什么在 lambda 内部引发异常是 C# 7 的一项功能? [复制]

    这个问题在这里已经有答案了 该语句在 VS2015 中无法编译 但在 VS2017 中可以编译 var example new Action gt throw new Exception 为了支持在 lambda 表达式内抛出异常 必须对
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • 等待运算符错误

    我的代码有问题 我怎么解决这个问题 这个问题出现在await操作符中 public MyModel HttpClient client new HttpClient HttpResponseMessage response await cl
  • 带有嵌入 Flash 视频的 PDF 示例?

    有谁知道我在哪里可以查看嵌入 Flash 视频的 PDF 示例 我知道问这个问题很愚蠢 因为你会认为任何面向技术的用户都应该能够使用谷歌找到一个 但我真的找不到 我的另一个问题是 使用 C 中的 API 将 Flash 视频嵌入 PDF 文
  • C++ 并行任务的开销

    我有以下简单的功能 include
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何生成可变参数包?

    给定不相关的输入是否可以生成非类型参数包 我的意思是 我想改变这一点 template
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 为什么我收到编译错误“使用已删除的函数 'std::unique_ptr ...”

    我收到一条巨大的编译错误消息 c mingw include c 6 1 0 bits predefined ops h 123 18 error use of deleted function std unique ptr lt Tp D
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • FFplay成功移入我的Winform中,如何设置它无边框?

    用这个代码 在 C 应用程序中显示 tcp 视频流 来自 FFPLAY FFMPEG https stackoverflow com questions 14201894 show a tcp video stream from ffpla
  • 使用左连接获得不适当的输出

    我正在尝试获取变体列表 并且对于每个变体都获取所有subvariants list无论子变体属于何处 特别的Test say 100 这是示例数据 Id TestId SourceSubVariantId TargetSubVariantI
  • 如何在 C 语言中获取输入中的空格

    我想从控制台获取字符数组 它还包含空格 我在 C 中知道的唯一方法是 scanf 但是一旦遇到空格 它就会停止接受输入 我该做什么 这就是我正在做的事情 char address 100 scanf s address 尝试使用 fgets
  • 当一对迭代器初始化时,向量是否知道先保留?

    考虑以下代码 struct MyData MyData const BYTE pData size t uSize bucket pData pData uSize std vector
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • 如何使用 .NET 捕获我的桌面视频?

    我想知道是否有任何方法可以使用 NET 捕获我的桌面的视频 截屏视频 我并不是在寻找截屏软件 而只是在寻找一种可以让我自己生成桌面视频的技术 我想过拍摄多个屏幕截图 但我不确定如何以编程方式生成带有图像序列的视频 有人有主意吗 Thanks
  • 推断“x => { throw .. }”的 Lambda 与重载方法中的 Func 匹配吗?

    我不明白为什么 C 最终在以下 LINQPad 代码中执行不正确的扩展方法 void Main Actual Sync Action Expected Sync Action Run x gt x Dump Actual Async Tas
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • ASP.net 上的 JQuery DatePicker

    Well 我试图将日期选择器放在 ASP net 表单上 我看到这段代码可以做到这一点
  • 使 byte[] 属性加载惰性

    我在用着EF4 代码优先我有一个财产 public byte Bytes get set 我可以让这个属性延迟加载 仅在需要时 吗 表分割在 EDF 4 1 RC 中有效 public class Item public int Id ge
  • Spring - @Value 返回 null

    我在下面有一个属性文件 src main 资源 我想使用 Spring 从中加载数据 在我的 Spring context xml 中我有这个
  • 如何将 UTF-8 std::string 转换为 UTF-16 std::wstring?

    如果我有 UTF 8std string如何将其转换为 UTF 16std wstring 实际上 我想比较两个波斯语单词 这就是你如何做到的C 11 std string str your string in utf8 std wstri
  • Firebase 服务器发送事件 - 如何构建 Java / JavaScript 客户端

    我是 Firebase 的新手 正在构建一个原型来测试是否适合我们的需求 我已经启动并运行了一个聊天示例 到目前为止一切顺利 接下来是需要倾听变化 我尝试使用 Java 和 JavaScript 连接到支持服务器发送事件的 REST API
  • 如何指定R-shiny和shinyFiles保存文件的文件和路径?

    我正在使用 R shiny 并希望将数据框保存为 Excel 文件 为此 我使用 shinyFiles 包 以便用户可以指定 excel 文件的存储位置 服务器R 图书馆 闪亮 库 闪亮的文件 shinyServer function in
  • 多个准备好的语句的问题

    问题就在这里 我有一份准备好的声明 如下所示 select something db gt stmt init select something gt prepare SELECT whatever FROM table select so
  • 如何初始化和使用静态结构[重复]

    这个问题在这里已经有答案了 我在类中定义了一个静态结构 但它导致错误为 Error 错误 LNK1120 1 个未解析的外部 我的头文件 class CornerCapturer static struct configValues int
  • Sagepay 5006 错误代码修复

    谁能告诉我为什么 sagepay 会抛出 5006 无法重定向到供应商的网站 我可以将交易发布到 sagepay 并且可以在 sagepay 端提供信用卡信息 但是 我的问题是 一旦它返回到我的通知页面 它就会抛出错误 5006 我最终无法
  • 在jquery中的anchor中添加span标签

    如何在锚点内添加span标签 将其更改为 a href somewhere html Here is the link to somewhere a 用 jquery 对此 a href somewhere html span Here i
  • 如何使用正则表达式删除字符串中的重复字符?

    我需要替换字符串中的重复字符 我尝试使用 outputString str replaceAll 1 这会替换重复的字符 但字符的位置会发生变化 如下所示 input haih output aih 但我需要得到一个输出hai 也就是说 字
  • 使用 indy / delphi 组件通过 https 发布文件

    我正在尝试使用 delphi 中的 Indy 组件通过 https 上传文件 这是我的代码 HTTP TIdHTTP Create Self IOHandler TIdSSLIOHandlerSocketOpenSSL Create HTT
  • 如何计算出响应式 CSS 的正确最小宽度和最大宽度值?

    我现在刚刚开始研究响应式 CSS 和设计 我想知道如何计算出各种设备宽度 我不想花一整天的时间测试每一个可能的移动设备 我只想让响应式布局足以发挥其作用 我看到一些网站使用 media only screen and max device
  • 在 python 脚本和 applescript 之间传递和接收值

    我对 python 和 applescript 很陌生 我有一个 python 脚本正在调用 2 个 applescripts 我想在 python 中定义一些全局变量并传递给 applescript 1 这些值将由 applescript
  • Azure 逻辑应用 SQL ODATA 按日期筛选

    我正在创建一个新的逻辑应用程序 它读取一个表 其中DateCreated lt ADDDAYS 60 GETDATE 并更新Archived bit to 1 但是 我一生都无法弄清楚如何将该过滤器实现为 ODATA 查询的一部分 到目前为
  • (Robotium) 操作栏向上/主页按钮单击

    I use Robotium作为我的 Android 应用程序的 Junit 测试库 我写了一些效果很好的测试 但是当我尝试编写测试时原生操作栏 s 单击向上 主页按钮 失败了 我的测试代码非常简单 Solo solo new Solo g
  • 为什么我会收到准备好的语句的语法错误? [复制]

    这个问题在这里已经有答案了 我已经编写了一个准备好的语句 但它在 给出了语法错误 我无法理解出了什么问题 它应该传递电影名称并作为该电影的导演获得结果 stmt getConnection createStatement String sq
  • 将 numpy 数组写入 lmdb

    我正在尝试将 python 中的一些 numpy 数组写入 lmdb import numpy as np import lmdb def write lmdb filename lmdb env lmdb open filename ma
  • Android Eclipse 错误:“Gson 无法解析为类型”

    我对 Java Eclipse 和 Android 比较陌生 所以这可能是一个完全愚蠢的问题 但我还是要问它 我正在学习一个项目来测试连接到 flickr api 并简单地显示最近的图像 我现在想要解析从 flickr 收到的 JSON 我
  • 如何防止 scanf 失败导致无限循环

    该代码应该可以换一美元并且运行良好 但教授说他将随字母一起输入随机数字 它可以很好地处理数字 但是当输入字母时会出现无限循环 有什么建议吗 include