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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase 4.2特性解读:Show Trace全链路跟踪,助力快速问题定位与精准诊断

在分布式数据库环境下&#xff0c;慢 SQL 诊断是运维人员面临的一大挑战。在无法及时发现问题根本原因的情况下&#xff0c;可能会严重影响用户体验&#xff0c;甚至会导致业务服务不可用。相对于单机数据库&#xff0c;分布式数据库系统涉及多个节点、多组件的协同工作&#x…

Go语言认识

Go语言认识 1. Go语言的设计背景2. Go语言的历程3. Go语言对比分析4. Go语言未来的发展规划5. 要不要选择Go 关注 go博客 直接了解第一手资料。 go文档 了解go的全貌。 1. Go语言的设计背景 Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它的设计…

构建基于RHEL7(CentOS7)的OpenSSH9.5p1的RPM包和升级回退方案

本文适用&#xff1a;RHEL7系列&#xff0c;或同类系统(CentOS7等) 文档形成时期&#xff1a;2023年 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目录 环境准备安装依赖openssh-9.5p1-el7.spec内容构建RPM包下载安装前注意事项开启t…

SQL注入攻击

1.用java实现登录的检查 package jdbc1;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner;public class Login {public static void main(String args[]){try(Connection connec…

Redis管道操作

文章目录 1. 问题提出2. 解决方案3. 案例演示4. 总结 1. 问题提出 如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于C/S一级请求响应协议的TCP服务&#xff0c;一个请求会遵循一下步骤&#xff1a; 客户端向服务端发送命令分四步&#xff08;发送命令-> …

教程视频二维码怎么做?扫码学习使用技巧

现在购买商品时经常会发现使用手册或者包装上会印有相关的二维码&#xff0c;扫码可以查看产品介绍或者使用说明的视频教学。将需要展示的内容放到二维码中&#xff0c;让用户能够通过扫码了解内容详情&#xff0c;有效的降低成本而且方便用户获取内容。 那么如果想要制作视频…

中科星图——Landsat9_C2_SR大气校正后的地表反射率数据

数据名称&#xff1a; Landsat9_C2_SR 数据来源&#xff1a; USGS 时空范围&#xff1a; 2022年1月-2023年3月 空间范围&#xff1a; 全国 数据简介&#xff1a; Landsat9_C2_SR数据集是经大气校正后的地表反射率数据&#xff0c;属于Collection2的二级数据产品&#…

128基于matlab的粒子群优化算法寻找多元函数的最大值

基于matlab的粒子群优化算法寻找多元函数的最大值&#xff0c;可定义多元函数&#xff0c;变量区间范围&#xff0c;输出最大值条件下的变量值。程序已调通&#xff0c;可直接运行。 128matlab多元函数极值 (xiaohongshu.com)

Sectigo有几种泛域名SSL证书买一年送一个月

Sectigo是一家知名的数字证书颁发机构&#xff0c;提供了很多种类型的SSL证书&#xff0c;可以满足不同用户的需求。其中&#xff0c;泛域名SSL证书是一种常见的证书类型&#xff0c;可以同时保护主域名以及主域名下所有子域名。今天就随SSL盾小编了解Sectigo旗下有几种泛域名S…

【origin】负载牵引的Smith圆图

【origin】负载牵引的Smith圆图 1.从ADS导入数据到origin2.smith圆图3.扩展到多组线4.参考资料 1.从ADS导入数据到origin export导出为txt&#xff0c;得到的是幅相值&#xff0c;复制到excel如下图&#xff0c;有多根类似格式的线&#xff0c;只需要复制DE列到origin中 复制到…

腾讯云COS桶文件上传下载工具类

1&#xff0c;申请key和密钥 2&#xff0c;引入依赖 <dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.24</version></dependency>3&#xff0c;工具类 package com.example.activi…

怎么找微信服务器的IP地址

首先&#xff0c;让微信客户端在PC端运行&#xff0c;在任务管理器->详细信息中&#xff0c;找到WeChat.exe的进程&#xff0c;找到PID 就是微信进程的ID号&#xff0c;如下图所示&#xff1a; 打开一个命令行窗口&#xff0c;cmd或者powershell窗口都可以&#xff0c;输入…

筛选数据-第15届蓝桥第三次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第164讲。 第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕&#xff0c;编程题一共有6题&#xff0c;分别如下&…

大数据之谷歌文件系统论文 GFS The Google File System

原文地址 谷歌文件系统论文 摘要 我们设计并实现了Google文件系统&#xff0c;这是一个面向大规模分布式数据密集型应用的可扩展分布式文件系统。 它在廉价的通用硬件上运行&#xff0c;提供了容错性&#xff0c;并向大量客户端提供高聚合性能。 尽管与先前的分布式文件系统…

2023 我的编程之旅——路人贾‘ω‘

哈喽&#xff01;大家好&#xff0c;我是路人贾&#x1f601;~今天不读论文也不讲算法&#xff0c;来聊点有意思的&#xff01; 这是我第100篇博文&#xff0c;我翻了几遍草稿箱的库存&#xff0c;正纠结选哪篇时&#xff0c;一抬头看见了这个活动&#xff0c;眼前瞬间一亮——…

高防服务器、高防 IP 和高防 CDN 之间有什么区别?

网络运营人员最头痛的是什么&#xff1f; 网络攻击无疑名列前茅。一旦企业遭受网络攻击&#xff0c;所面临的损失可能是无法估量的。那么&#xff0c;如何有效地抵御网络攻击呢&#xff1f; 高防 IP、高防 CDN 和高防服务器是当前主流的防御手段。那何为“高防”呢&#xff1…

【深度学习每日小知识】Overfitting 过拟合

过拟合是机器学习&#xff08;ML&#xff09;中的常见问题&#xff0c;是指模型过于复杂&#xff0c;泛化能力较差的场景。当模型在有限数量的数据上进行训练&#xff0c;并且学习了特定于该特定数据集的模式&#xff0c;而不是适用于新的、看不见的数据的一般模式时&#xff0…

tkinter控件中文显示为unicode编码的解决办法

一、背景 最近使用python tkinter编写界面应用时&#xff0c;发现按钮的中文名称在windows上显示正常&#xff0c;但是在linux上显示为中文的unicode编码&#xff1b;文本输入框也是&#xff0c;输入中文输时&#xff0c;text控件上也显示为unicode编码&#xff0c;如下图所示…

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…

智能雾化壁炉设计,新时代科技与美学的完美结合

智能雾化壁炉设计&#xff0c;新时代科技与美学的完美结合 随着科技的不断创新&#xff0c;智能雾化壁炉设计成为家居设计领域的一颗耀眼明珠。它的出现不仅改变了传统壁炉的概念&#xff0c;更为我们带来了全新的视觉和感官体验。下面让我们一起探索智能雾化壁炉设计的优势和特…