#include<stdio.h> //十进制转二进制
#define N 16
int main()
{
short n;
int i,ret;
int num[N] = {0};
do
{
printf("n=");
ret = scanf("%hd",&n);
if(ret != 1) //这个如果去掉为什么会有问题呢,我感觉不判断也行呀
while(getchar() == '\n');
}while(n <= 0 && ret != 1);
for(i = 0;i < N && n != 0;i ++)
{
num[i] = n % 2;
n = n / 2;
}
printf("the binary number is ");
for(i = N - 1;i >= 0;i --)
{
printf("%d",num[i]);
}
return 0;
}
非法字符的处理 有一个小问题
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
fortunely2 2021-11-25 14:43最佳回答 专家已采纳建议去看一下scanf的说明文档:https://man7.org/linux/man-pages/man3/scanf.3.html
其中,return value里面提到:RETURN VALUE
On success, these functions return the number of input items
successfully matched and assigned; this can be fewer than
provided for, or even zero, in the event of an early matching
failure.
The value EOF is returned if the end of input is reached before
either the first successful conversion or a matching failure
occurs. EOF is also returned if a read error occurs, in which
case the error indicator for the stream (see ferror(3)) is set,
and errno is set to indicate the error.这里scanf返回值ret有3种情况
- > 0,表示成功输入了ret个参数;
- == 0, 表示匹配失败,比如要求数字,你输入字母;
- EOF(值为-1),表示在成功匹配前,或者已经匹配失败,输入就结束了;
你只考虑正常情况,中间那个if 语句当然可以不需要。
但是,当输入异常的时候,比如输入一个字母,ret = scanf("%hd",&n);
因为无法读取到整数,就返回0,并且缓冲区内容由于读取失败而没有被清除(一直留在scanf对应库缓冲区),这样就会形成无限循环。
如果加上读取失败判断:if (ret != 1)
,进而用getchar()读取并清除库缓冲区,也就不会形成无限循环。采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报 编辑记录微信扫一扫
分享评论登录 后可回复...
报告相同问题?
相关推荐 更多相似问题
- 2017-12-27 09:40回答 17 已采纳 如果针对手机号,可以用正则匹配下,去掉数字以外的字符,str.replaceAll("[^0-9]", "")
- 2018-10-10 23:48回答 2 已采纳 #include #include using namespace std; string StrCon(const string& a, const string& b) { strin
- 2015-12-02 00:41回答 5 已采纳 ? 应该是不能识别的字符,例如纯英文下输出汉字 可能是凑巧是? 也可能是替换符号, 凡是不能识别的都用?代替
- 2020-06-14 15:53有勇气的牛排的博客 过滤非法字符 def sql_filter(sql, max_length=20): dirty_stuff = ["\"", "\\", "/", "|", "&", "*", "'", "=", "-", "#", ";", "<", ">", "+", "%", "$", "(", ")", "%", "@","!"] for stuff in dirty...
- 2019-10-29 22:57kanoすき的博客 Java 编程语言单词汇总step-01 掌握拓展step-02 掌握拓展step-03 掌握拓展step-04 掌握拓展step-05 掌握拓展step-06 掌握拓展step-07 掌握拓展step-08 掌握拓展step-09 掌握拓展step-10 掌握拓展step-11 掌握拓展...
- 2021-06-19 14:42请叫我阿ken的博客 是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、大型计算机等。 - **计算机的应用主要在以下几个方面** ...
- 2015-08-26 15:48回答 3 已采纳 你的程序没有发现问题 ``` #include void fun(char * a) { int i = 0, j = 0; while (a[i] ==
- 2019-07-12 09:33回答 4 已采纳 How to remove the last letter from the string? In Go, character strings are UTF-8 encoded.
- 2017-03-12 05:40回答 2 已采纳 
- 2020-08-25 06:52郝光明的博客 83解释器(interpreter): 一种执行程序的计算机程序,被执行的程序由某种编程语言编写。 通过从程序中一个接一个读取指令然后逐条执行(将指令翻译为等价的机器语言)。 84I/O: 输入/输出。 计算机程序与其它部分的...
- 2021-02-26 16:10www.bajins.com的博客 面向对象编程 常用 JDK(Java development kit) java开发工具包 常用 JVM(java virtual machine) 虚拟机 常用 classpath 类路径 常用 Version 版本 常用 author 作者 常用 java 解释命令 常用 ...
- 2021-02-27 22:17路过的陈哥的博客 程序设计语言与语言程序处理程序基础 第一节.编译过程 第二节.文法定义 第三节.有限自动机与正规式 第四节.表达式 第五节.函数调用——传值与传址 第六节.程序设计语言的种类、特点及适用范围 第七章.程序...
- 2019-07-12 13:49回答 2 已采纳 # 注意,可以不要悬赏提问,在提问的时候去掉悬赏前面的复选框就可以了 ``` using System; using System.Collections.Generic; using
- 2016-03-23 10:09回答 1 已采纳 可以的,BSTR就是COM类型的字符串。
- 2016-03-02 05:50回答 1 已采纳 ``` dim n = 0 dim max = 0 for i = 2 to len(s) if mid(s,i,1)=mid(s,i-1,1) then n = n +
- 2019-10-07 21:22梦因you而美的博客 1、本知识点的考查形式主要有:给出编译与解释相关的描述,判断正误;给出编译各个阶段的描述,判断正误。 【要点分析】 1、解释程序,也称解释器;直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以...
- 2021-12-08 23:36尘世中迷途小码农的博客 这篇文章简要讨论了Java安全编程需要考虑的若干问题,通过对这些问题的深入理解,能够帮助我们在实际编码过程中避免出现安全相关的问题,从而提高代码质量。 由于时间关系,没有给出每个场景的示例代码,仅说明了该...
- 2014-08-23 16:11hehuimin6的博客 [转][转帖]想成为嵌入式程序员应知道的16个基本问题 2006-4-13阅读4277 评论3 这是嵌入式C程序员的基本知识。作者在Embedded Systems Programming杂志上发表了很多嵌入式系统开发方面的文章。 C语言测试...
- 2019-07-16 16:26回答 4 已采纳 def dividing(file_name): result = {} all_lines = open(file_name).readlines()
- 2018-12-26 16:18hlzs_01的博客 通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了解。 1.1 Linux 简 介 Linux是能够自由传播并继承了UNIX内核的操作系统,是对UNIX的简化和改进,它既保留了UNIX系统的高安全性,同...
- 没有解决我的问题, 去提问