技术标签: puts 字符数组 C语言 scanf gets 输入输出
目录
用printf输出输出方法1:printf 逐个字符输出。
输出方法2:printf 将整个字符串一次输出。
用scanf输入如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。 输入方法1:scanf 逐个字符输入。
输入方法2:scanf 输入一个字符串。
scanf("%s", c); //系统自动在China后面加一个'\0'结束符。 printf("%s", c); //按字符数组名c找到其数组起始地址,然后逐个输出其中的字符,直到遇到'\0'为止。 为什么只输出一个anan呢? 由于系统把空格字符作为输入的字符串之间的分隔符,因此只将空格前的字符anan送到数组c中。 //数组中未被赋值的元素的值自动置'\0'。 由于把"anan"作为一个字符串处理,故在其后加'\0。c数组状态如下:
内存格式不是书上说的那种?Why? 输入方法3:scanf 输入多个字符串。
输入后各个字符数组的状态如下(摘自C语言谭浩强第三版):
下面这个程序是为了验证上面那个内存的存储状态:程序见后面 根据上面的输出结果可以看出,不是所有未赋初值的元素都是\0,为什么呢?到底应该是什么样子的呢? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
为了解决scanf函数不能完整地读入带有空格字符的字符串,C语言提供了一个专门用于字符串的函数gets,它读入全部字符(包括空格),直到遇到回车为止。 注:只要遇到空白字符就结束输入,空白字符包括空格、tab、enter |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用gets输入gets(字符数组) gets(str) 一般利用gets函数的,目的是向字符数组输入一个字符串,而不关心其函数值。
可以看到,成功解决了scanf遇到空白字符就终止的问题。 但是很明显的可以卡到,输入的字符大于10个字符,但是并没有出错,这就说明: gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装得下输入行。 如果输入的字符串过长,会导致缓冲区溢出(buffer overflow),即多余的字符超出了指定的目标空间。gets()函数就会访问未被分配的内存空间,如果这些内存未被使用,不会立即出现问题;如果这片空间已经存有数据,就会擦除掉程序中的其他数据,会导致程序中止。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
下面这一段呢,是根据自己之前做的一些工作,见下面。 自己的小疑虑:输入8个字符,为什么不把最后的两个'\0'输出呢? 答案:小傻子,你是用%s输出的字符串,字符串是遇'\0'则止的字符数组,所以就输出有效字符就好了。看下面的例子,我们把字符数组里面所有的字符输出,是不是就有那两个'\0'呢。 C语言字符数组与字符串的种种 CSDN
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用puts输出puts(字符数组) |
//验证内存存储
#include<stdio.h>
void printByChar(char c[], int count){
int i;
printf("**");
for(i = 0; i < count; i++){
printf("%c", c[i]);
}
printf("**\n");
}
void main(void){
char c[10];
printf("请输入一个字符串(有四个单词,每个不多于10个字母):");
scanf("%s", c);
printf("输入的字符串为:%s\n", c);
printf("字符数组中所有元素为:\n");
printByChar(c, 10);
}
//验证内存存储
#include<stdio.h>
void printByChar(char c[], int count){
int i;
printf("**");
for(i = 0; i < count; i++){
printf("%c", c[i]);
}
printf("**\n");
}
void main(void){
char c1[10], c2[10], c3[10], c4[10];
printf("请输入一个字符串(有四个单词,每个不多于10个字母):");
scanf("%s%s%s%s", c1, c2, c3, c4);
printf("输入的字符串为:%s %s %s %s\n", c1, c2, c3, c4);
printf("各个字符数组中所有元素为:\n");
printByChar(c1, 10);
printByChar(c2, 10);
printByChar(c3, 10);
printByChar(c4, 10);
}
#include<stdio.h>
void printByChar(char c[], int count){
int i;
printf("**");
for(i = 0; i < count; i++){
printf("%c", c[i]);
}
printf("**\n");
}
void main(void){
char c[10];
printf("请输入多个字符(不多于10个):");
gets(c);
printf("输出字符数组中的所有字符:");
printByChar(c, 10);
printf("输出的字符串为:**%s**", c);
}
文章浏览阅读8.4w次,点赞67次,收藏608次。不知不觉肝阴阳师也快一年了,对这游戏真是又爱又恨,最近刚刚发布了PC版,突然很想尝试着写个脚本挂机,话不多说进入正题。简单的鼠标操作游戏挂机脚本,无非就是自动移动鼠标,自动点击,进行重复操作,所以,第一步就是如何控制鼠标_我是农场主自动挂机脚本
文章浏览阅读135次。时间复杂度O(n)java代码import java.util.*;class Main{static int n = 0, N = 1000010;static int[] phi = new int[N];//存储数字n的质数的个数static int[] primes = new int[N];//存储质数的下标对应的质数static int cnt = 0;//存储质数的下标static ..._java 欧拉筛
文章浏览阅读1.1w次,点赞2次,收藏19次。就目前市场来看,时间管理类应用,大致分为划分为:行程管理、任务管理和备忘管理三种类型。市场上,这三种类型的产品百花齐放,做细分市场的,做垂直人群的不断在增加。今天,我们来看看“日历”,这个可以囊括行程管理、任务管理和备忘管理的工具。数据显示,从07年到15年的,人们对PC日历的需求越来越大,为了方便用户,日历APP在此基础上开始衍生。 APP因手机、平板等电子化设备携带方便,在各使用场景中占有优势_时间管理类app用户调研
文章浏览阅读371次。1、初识MySQLjavaEE:企业级java开发 Webweb分为 :前端(页面:展示(数据库里的数据))后台 (连接点:链接数据库JDBC,链接前端(做控制,控制试图跳转,和给前端传递数据))数据库 (存数据,txt,Excel,world)只会写代码的码农是基本的,学好数据库; 基本混饭吃学习操作系统,学习数据结构与算法! 当一个不错的程序员离散数学,数字电路,网站体系结构,编译原理。+实战经验 = 优秀的程序员1.1、为什么学习数据库岗位需求现在的世界,大数据时代,
文章浏览阅读4.3k次,点赞2次,收藏8次。bug的生命周期BUG的生命周期,就是一个BUG被发现到这个BUG被关闭的过程。生命周期中缺陷状态:新建-->指派-->已解决-->待验-->关闭发现BUG-->提交BUG-->指派BUG-->研发确认BUG-->研发去修复BUG-->回归验证BUG-->是否通过验证-->关闭BUG如果待验的BUG在验证时没有解决好,我们需要重新打开--指派—已解决—待验,循环这个过程。中间其他状态:拒绝、延期等_bug生命周期流程图
文章浏览阅读5.3k次,点赞3次,收藏18次。Pandas对行/列求和_pandas对具体列求和
文章浏览阅读9.4k次。对于word中存在合并单元格的表格: 下图是对Cells遍历的结果,True表示该行该列的单元格存在,False表示不存在。_vc++ ole 判断word表格单元格是否合并
文章浏览阅读55次。将一个类定义在另一个类里面,里面的那个类称为内部类,与属性、方法等一样视作外部类的成员。内部类提供了更好的封装,不允许同包中的其他类访问该内部类。内部类作为外部类的成员,同样可以被4个访问限定符修饰。如果外部类需要访问非静态内部类的成员,必须创建非静态内部类对象来访问。内部类成员可以直接访问外部类的数据。如果存在一个非静态内部类对象,则一定存在一个被它寄存的外部类对象,也就是说在拥有外...
文章浏览阅读1.3k次。一. FlatBuffers 是什么?FlatBuffers 是一个序列化开源库,实现了与 Protocol Buffers,Thrift,Apache Avro,SBE 和 Cap'n Proto 类似的序列化格式,主要由 Wouter van Oortmerssen 编写,并由 Google 开源。Oortmerssen 最初为 Android 游戏和注重性能的应用而开发了FlatBuffe..._flatbuffers64位
文章浏览阅读626次。自己的IT发展方向。1.做T型进化,横向做语言(java、python)的扩展,纵向主要是算法、模式、计算机原理。2.多系统的学习,WINDOW和LINUX的基本操作及维护。3.尽量做产品,少做项目,提高自己的竞争力。4.外语学习,日语是工作方面,英语是学习方面。坚持做自己喜欢的事。_it以后的几个方向
文章浏览阅读392次。对于二叉排序树,下面的说法 ___是正确的。(华南理工大学 2006年)设备驱动程序在读写磁盘数据时一般釆用下列哪种I/O方式?(中国科学院大学 2018)下列___交换技术是独占信道工作方式。(中南大学 2006年)命中率高且电路实现简单的Cache 与内存映射方式是___映射方式。(中国科学院大学 2015)_命中率高且电路实现简单的cache内存映射方式
文章浏览阅读3.2k次。可能是没有异常处理,只需要加上throws Exception就解决问题了。_unhandled exceptions: java.lang.instantiationexception, java.lang.illegalacc