C程序训练:与输入有关的错误
在录入程序时有时稍不注意就可能录入错误的字符导致程序运行结果出现错误,下面举例说明。
下面程序的运行结果是错的,但程序又没有错,到底问题出现在哪呢?
#include <stdio.h>
int main()
{FILE *fp;int i, k, n;fp=fopen("data.dat", "w+");for(i=1; i<6; i++) {fprintf(fp,"%d ",i);if(i%3==0) {fprintf(fp,"\n");}}rewind(fp);fscanf(fp, "%d%d",&k,&n);printf("%d %d\n",k,n);fclose(fp);return 0;
}
程序运行结果是:
![]()
并且在不同的机器上运行的结果可能不同,例如结果可能是:
1 20
1 -858993460
检查程序,也没有看出问题来,打开文件的方式是"w+",这意味着对一个文本文件进行读写,如果打开文件时文件不存在,则创建,否则打开已存在文件,截断所有内容,从头再写,然后可以读。
百思不得其解,后来对fprintf(fp,"%d ",i);进行查看,无意间发现光标在移过空格时和平时的印象不一样,仔细分析,发现了问题,此处的字符“ ”不是空格字符“ ”。那么“ ”到底是什么?我们把它拿出来,编写程序看看它的原形,程序如下:
#include <stdio.h>
#include <string.h>
int main()
{char str[]={" "};int len=strlen(str); printf("len=%d\n",strlen(str));for(i=0; i<len; i++) {printf("%2x ",str[i]&0xff );}printf("\n");return 0;
}
运行结果如下图所示。
![]()
该字符长度为2,这两个字节值都是0xa1,它中文语境中用它来作为空格的,有的中文输入法,在输入空格时,可能用它代替空格。
问题找到了,用空格' '替换' ',程序运行结果正确,输出结果是:
1 2
在实训中,我们同样遇到一个类似的错误,程序如下:
/* 编写函数:用来判断一个整数是否满足"用3除余1,用5除余3,用7除余4”,满足则返回1,不满足返回0,然后编写main函数,输入范围m和n,通过调用该函数显示出m~n之间满足该条件的数。
*/
#include <stdio.h>
int fun(int s, int t)
{for(int i=s; i<=t; i++) {if(i%3==1 && i%5==3 && i%7==4) {return i; } }return -1;
}
int main()
{int s,t,num;scanf("%d,%d",&s,&t);do {num = fun(s,t);if (num>=0){printf("%d ",num);} s=num+1;}while(num>=0); return 0;
}
显然,这个结果与我们预想的不一样,为什么?
在第19行要求输入数据时以逗号为分隔符,我们在输入数据时也是用逗号作为分隔符的,为什么错呢?
细心观察输入逗号,发现它非常的圆润,不像西文的逗号,问题是不是它呢?再次运行,结果正确了。

可见,在输入时也需要区分中西文符号的不同。
如何避免这个问题的出现呢?
一种方法就是在scanf中不要使用分隔符,在输入数据时用空白符作为分隔符录入数据,因此,第19行改为scanf("%d%d",&s,&t); 就可以避免这类错误。
第二种方法,在输入时进行判断,如果没有接收到正确的输入,那就再次输入。
第19行的语句用下面的语句块替代:
while (scanf("%d,%d",&s,&t)!=2) {
printf("Input error, try again.\n");
while(getchar()!='\n');
}
参考文献:
[1]李红卫,李秉璋. C程序设计与训练(第四版)[M],大连,大连理工大学出版社,2003.
[2]https://pan.baidu.com/s/17ZXphwqySNIsIgcGtYMjvg?pwd=lhwc
相关文章:
C程序训练:与输入有关的错误
在录入程序时有时稍不注意就可能录入错误的字符导致程序运行结果出现错误,下面举例说明。 下面程序的运行结果是错的,但程序又没有错,到底问题出现在哪呢? #include <stdio.h> int main() {FILE *fp;int i, k, n;fpfopen(…...
制作 CentOS Stream9 的U盘系统启动盘
一、简述 注:请勿用于商用,如有版权纠纷,于博主无任何关系。(仅用于学习研究使用) 由于CentOs Linux 7和CentOs Stream8终止日期是2024年,需要将系统升级到最新版本的CentOs Stream9,下面是刻录系统盘的操…...
Vulnhub靶机:driftingblues 1
一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:driftingblues1(10.0.2.17) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entr…...
CloudCompare——点云空间圆拟合
目录 1.概述2.软件实现3.完整操作4.算法源码5.相关代码 本文由CSDN点云侠原创,CloudCompare——点云空间圆拟合,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的To…...
解决POI报错POIXMLTypeLoader不存在的问题
问题: springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoaderat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet…...
关于rewriteBatchedStatements的源码分析
在之前的优惠券兑换码需求中,涉及批量写入问题,其中有一个关键的连接配置参数非常重要——rewriteBatchedStatements,当该值配置为true时,Statement将可能对批量插入sql进行重写。 何谓重写?原来提交的批量执行语句&a…...
自动化神器 Playwright 的 Web 自动化测试解决方案
1. 主流框架的认识 总结: 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化,因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三…...
docker filebeat 将日志多级目录和多维json数据日志同步到es
注 使用的时候先调试调试配置,调试成功在尝试写入es,如果es写入失败就是es账户.密码/白名单.和index未创建的问题,细节可以留言 setup.template.priority 模板优先级 调整这个可以配置一台机器多个filebeat 容器启动 多级目录日志和多维josn日志结构 filebeat.inputs:- typ…...
【机器学习】模型参数优化工具:Optuna使用分步指南(附XGB/LGBM调优代码)
常用的调参方式和工具包 常用的调参方式包括网格搜索(Grid Search)、**随机搜索(Random Search)和贝叶斯优化(Bayesian Optimization)**等。 工具包方面,Scikit-learn提供了GridSearchCV和RandomizedSearchCV等用于网格搜索和随机搜索的工具。另外,有一…...
webview全屏处理,即插即用
去年双十一有个直播的需求,听起来很简单,技术也都很成熟,但是真的开始实现后,还是有不少坑的,首先第一个uc内核不支持webRTC协议,需要重新开发chrome内核的webview,其次webview全屏处理、悬浮窗…...
实录分享 | 央企大数据平台架构发展趋势与应用场景的介绍
分享嘉宾: 孟子涵-中国华能集团信息中心平台架构师 2021年华能就与Alluxio建立了合作,共同写了整个华能统一纳管的架构方案。这个方案我认为是现在我们在央企里边比较核心的一套体系,能让全集团所有我们认为重要的数字化资源实现真正的统一集…...
UE5 将类修改目录
有个需求,需要修改ue里面类的位置,默认在Public类下面,我想创建一个二级目录,将所有的类分好位置,方便查看。 上图为创建一个类所在的默认位置。 接下来,将其移动到一个新的目录中。 首先在资源管理器中找…...
GPT实战系列-ChatGLM3管理工具的API接口
GPT实战系列-ChatGLM3管理外部借力工具 用ChatGLM的工具可以实现很多查询接口和执行命令,外部工具该如何配置使用?如何联合它们实现大模型查询助手功能?例如调用工具实现股票信息查询,网络天气查询等助手功能。 LLM大模型相关文章…...
Python 列表、元组、字典区别
1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素,而元组就是一个整体,不能修改和删除,一定要修改或删除的话,只能修改和删除整个元组。 3.既然元组不能删除和修改,有什么作用呢? 1…...
[足式机器人]Part2 Dr. CAN学习笔记 - Ch03 傅里叶级数与变换
本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Ch03 傅里叶级数与变换 1. 三角函数的正交性2. 周期为 2 π 2\pi 2π的函数展开为傅里叶级数3. 周期为 2 L 2L 2L的函数展开4. 傅里叶级数的复数形式5. 从傅里叶级数推导傅里叶变换FT6. 总结 1. …...
你想使用域名访问一个ip的网页,你应该怎么办呢?
你想使用域名访问一个ip的网页,你应该怎么办呢? eg:你想用https://test.com/访问http://1.1.1.1/方法: eg:你想用https://test.com/访问http://1.1.1.1/ 方法: 1.首先,如果你是服务器的管理者,你需要在服务器的官网申请一个test.com的域名,然后在官网将域名映射到1.1.1.1上. …...
SAP存放状态的几个常用表
SAP存放状态的几个常用表 在sap中,包括订单、项目、计划、设备主数据等,存在审批流程的业务单据,这些业务对象都会有状态的属性,用来控制和约束该业务当前的操作。 主要的表 JEST:存放了该对象编号的当前状态 JCDS…...
AUTO SEG-LOSS SEARCHING METRIC SURROGATES FOR SEMANTIC SEGMENTATION
AUTO SEG-LOSS: 搜索度量替代语义分割 论文链接:https://arxiv.org/abs/2010.07930 项目链接:https://github.com/fundamentalvision/Auto-Seg-Loss ABSTRACT 设计合适的损失函数是训练深度网络的关键。特别是在语义分割领域,针对不同的场…...
openssl3.2 - 官方demo学习 - 索引贴
文章目录 openssl3.2 - 官方demo学习 - 索引贴概述笔记工程的搭建和调试环境BIOBIO - client-arg.cBIO - client-conf.cBIO - saccept.cBIO - sconnect.cBIO - server-arg.cBIO - server-cmod.cBIO - server-conf.cBIO - 总结certsciphercipher - aesccm.ccipher - aesgcm.ccip…...
textarea文本框根据输入内容自动适应高度
第一种: <el-input auto-completeoff typetextarea :autosize"{minRows:3,maxRows:10}" class"no-scroll"> </el-input> /* 页面的样式表 */ .no-scroll textarea {overflow: hidden; /* 禁用滚动条 */resize: none; /* 禁止用户…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
