整数的scanf获取字符时如何处理异常

2023-11-29

当输入是字符时,下面的简单程序将给出无限循环,尽管它意味着区分字符和数字。如何测试是否scanf使用返回值获取应该是数字的字符scanf?

#include <stdio.h>

int main() {
  int n;
  int return_value = 0;

  while (!return_value) {
    printf("Input a digit:");
    return_value = scanf("%d", &n);
  }

  printf("Your input is %d\n", n);

  return 0;
}

As Joachim在他的回答中指出,这个角色不会被scanf在这里并存在于缓冲区中,在下一次迭代中scanf再次读取相同的字符并再次将其保留到缓冲区,依此类推。这会导致无限循环。

您需要在下一次迭代之前消耗这个角色。只需放置一个getchar()行后return_value = scanf("%d", &n);

return_value = scanf("%d", &n);
while(getchar() != '\n');     // will consume the charater
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数的scanf获取字符时如何处理异常 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • Volatile.Read 和 Volatile.Write 背后的逻辑是什么?

    来自 MSDN Volatile Read 读取字段的值 在需要它的系统上 插入一个 阻止处理器重新排序内存的内存屏障 操作如下 如果在该方法之后出现读或写 代码 处理器无法移动它before这个方法 and Volatile Write
  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • while循环中的变量初始化

    我有一个可以分块读取文件的函数 public static DataObject ReadNextFile 数据对象看起来像这样 public DataObject public string Category get set And ot
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • “必须声明标量变量”错误[重复]

    这个问题在这里已经有答案了 必须声明标量变量 Id SqlConnection con new SqlConnection connectionstring con Open SqlCommand cmd new SqlCommand cm
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 为什么我不能创建这样的 numpy 数组: array([1, 2], 3)

    from numpy import array test list 1 2 3 x array test list ValueError setting an array element with a sequence 基本上 我有一个带有
  • 如何访问 iFrame 中的 DOM 元素

    我正在编写一个 jQuery 插件 它需要能够针对 iFrame 中的 DOM 元素运行 我现在只是在本地测试这个 即 url 是 file example html 在 Chrome 中我一直点击 SecurityError 无法从 HT
  • 在 C# 中将 MM:SS 字符串转换为 HH:MM:SS

    我有这段代码可以很好地将 HH MM SS 转换为整数秒 for int i 0 i lt nrdaily Rows Count i double NRT TimeSpan Parse nrdaily Rows i 3 ToString T
  • 从 WiX 更改 XML 节点值

    我希望能够从 WiX 更改 XML 节点值 XML 结构如下所示
  • SSIS正在成功执行,但它似乎没有运行脚本任务部分

    我有一个 SSIS 包 它运行 SQL 查询并通过数据流任务将其导出到 csv 文件 创建 csv 后 我设置了一个 脚本任务 来连接到 SMTP 服务器并将 csv 文件作为附件发送 在我的本地计算机上 该包运行良好 但是当我将其加载到服
  • 未指定网络安全配置,使用平台默认值 - Android 日志

    我正在尝试通过 000webhost com 创建数据库 每当我从 android studio 运行应用程序时 我都会在事件日志中看到此消息 有谁知道如何解决这个问题 非常感激 我也有同样的问题 请将此行添加到清单中的应用程序标记中 我希
  • Espresso 不会等待 ViewPager 上的滑动操作完成

    Espresso 宣传的特点是它总是等待 Android 的 UI 线程空闲 这样你就不必处理任何计时问题 但我似乎发现了一个例外 设置是一个ViewPager与EditText在每个片段中 我想要 Espresso 将文本输入到EditT
  • 将系列转换为 Pandas DateTime [重复]

    这个问题在这里已经有答案了 D 10Aug49 21Jan45 15Sep47 13Jun52 将其转换为 pandas 日期 确保年份是 1900 年而不是 2000 年 到目前为止 我有这段代码可以转换并打印 pandas 日期 但世纪
  • Session_End 可以在窗口关闭时触发吗? (ASP.NET)

    我在网站上放置了一个 在线 计数器 并且遇到了这两个相互矛盾的来源 这个 我正在使用这个示例代码 http aspdotnetfaq com Faq How to show number of online users visitors f
  • Yii2 速率限制 API

    我担心 Yii2 速率限制 api 什么是速率限制 api 为什么使用它 这里有一些方法来自Yii2yii 大师能否用简单的话解释一下这些方法 我应该在何时何地在我的 api 中使用速率限制 public function getRateL
  • 如何改变变量赋值的较低索引?

    我想对具有较低索引的变量进行赋值 这就是我想做的 int i logic 63 0 data i someCalculatedNumber data 63 i 8 h0 我知道这不会编译 完成这项任务的最佳方法是什么 如果您希望将 LSB
  • 快速获取服务器时间

    有没有办法让服务器时间与 swift 我想根据服务器设置静态时间 这样 即使用户更改时区和日期 也没关系 视图控制器上显示的时间将是基于服务器的时间而不是 NSDate let today NSDate println today 目前 如
  • 对 pandas 列的多个子集高效运行回归分析

    我本可以选择一个较短的问题 只关注这里的核心问题 即列表排列 但我带来的原因统计模型 and pandas问题是 可能存在用于逐步回归的特定工具 同时具有存储所需回归输出的灵活性 就像我将在下面向您展示的那样 但效率更高 至少我希望如此 给
  • Json.net - 填充字典时如何保留字典值引用?

    我想从 JSON 文件填充字典中包含的对象 同时保留对象引用本身 Json net 关于 PreserveReferencesHandling 的文档明确指出 如果类型实现 System Runtime Serialization ISer
  • 是否有一个 java 类用于使用日期构造 cron 表达式?

    我需要根据表单中的用户输入构建一个 cron 表达式 所以我有一个日期选择器和一个选择框来选择频率 我可以很容易地从中构建一个 cron 表达式 但感觉就像我在重新发明轮子 有适合我的课程吗 类似方法的东西 public String cr
  • 检测键控状态变化

    我是数据流编程模型的新手 在思考我认为应该是一个简单的用例时遇到一些困难 我有一个从 Pub Sub 读取实时数据的管道 该数据包含带有 简化的 序列号和状态 UP 或 DOWN 的设备状态 保证设备至少每 5 分钟发送一次其状态 但设备当
  • 如何获取从最后一个匹配到文件末尾的行?

    需要打印最后一个匹配之后到文件末尾的行 比赛的数量可以是任意的 并且是不确定的 我有一些文字 如下所示 MARKER aaa bbb ccc MARKER ddd eee fff MARKER ggg hhh iii MARKER jjj
  • 如何在varchar中查找5位数字?

    基本上我只需要得到一个由空格分隔的 5 位数字 5 位数字可以位于 varchar 中的任何位置 示例 我有一个 varchar 列 其中包含 SQL 2008 表中的各种数据 travel visa 34322 LLL001 Coffee
  • 更改 .each() 在 Firefox 和 chrome 中的顺序

    我有一个返回 JSON 编码数据数组的 Web 服务 然后我使用 jQuery 的 each 函数来迭代该数组 但在 Firefox 中它向下迭代 而在 Chrome 中它向上迭代 从网络服务返回的数据是 data 610 id 610 u
  • 整数的scanf获取字符时如何处理异常

    当输入是字符时 下面的简单程序将给出无限循环 尽管它意味着区分字符和数字 如何测试是否scanf使用返回值获取应该是数字的字符scanf include