输入输出方法

今天想要粗浅记录的主要内容是说C语言键入字符和输出字符的不同方法及区别

C语言中的键入输出方法

1.scanf和printf

在我这两年简单接触C语言的经验中,scanf和printf是C语言中最常用的一组输入输出方式。

printf函数用于向标准输出设备(显示器)按规定格式输出信息。我一般用这个函数来输出提示信息和打印需要输出的信息,例如:

printf("请输入两个数字:\n");

printf("两数相加的值为%d",x);

这里可以发现,这两行代码的输出用了不同的格式,但其实是一样的,第一行代码就是打印出提示信息,这信息可以直接输出,\n也是普通字符,但是打印出来是回车的意思,用于换行。第二行代码因为要输出代码中的变量的值,所以需要加格式控制符%d用于输出int型变量x,其他类型的字符如果要输出需要用其他的格式控制符,例如如果想要以字符形式输出变量c,就需要添加格式控制符%c。

scanf函数用于从标准输入设备(键盘)按规定格式输入数据,在函数scanf的调用格式中,变量之前需要有取址符&,但是如果是输入%s类型的,则不需要,例如

scanf("%s", s);

scanf("%d", &a);

同时,如果是给指针赋值,则也不需要加取址符&,其他的变量,如果用scanf输入的时候忘记加&,虽然程序代码不会报错,但是会运行出来乱码。如果在两个格式控制符中间没有加入分隔符,则在输入变量的时候,直接使用空格,回车或者tab键作为两个输入数据之间的间隔。

这里有一个小知识,其实scanf中是可以加入普通字符的,例如

scanf("a=%d",&a);

这是数据输入形式就要更改为 a=1这样的,但是一般不建议这么写,因为这样会增加不必要输入,所以一般是将scanf和printf配合使用,如下:

printf("请输入整数 a=");
scanf("%d",&a);

2.gets和puts

这两个函数一般在字符串的输入输出中会得到使用,而其他的变量则不会使用。

gets函数的功能室将键盘的输入以字符串的形式存储在str所致内存单元中,直到遇到回车换行符'\n',并将'\n'转换为字符串终结符\0,这里面的str可以是字符数组变量,也可以是指向某个确定存储单元的字符串指针。其的原型如下:

char *gets(char *str)

这里就已经可以发现gets和scanf的不同了,用一个比较生动的比喻来说,scanf就像是一个挑食的孩子一样,他不能接受空格,遇到空格,就表示已经接受完了这个数据,因此我们在使用scanf作为输入函数的时候,可以使用空格,回车和tab键作为字符与字符之间的分隔,但是gets他包容性比较强,哪怕是对于空格也会欣然接受,因此我们在用gets作为输入函数的时候,只可以使用回车作为字符的终结。

因为gets不挑食这个特性,我们在设置字符数组的长度的时候应该足够长,否则会造成内存溢出,导致覆盖其他内存。同时作为输入函数,他不接受str指向不能改变的常量。所以如下代码都是错误的:

char *str;
get(str);
//指针str的值不确定,不知道该指针指向何处

char *str = "China!";
gets(str);
//相当于覆盖掉字符串常量China!,puts没有这个功能,不能正确实现读操作

下面给大家展示一下正确的代码语句的书写:

char *str,ch[80];
str=ch;
gets(str);
//将读入的字符串存入str所指内存单元

char ch[80];
gets(ch);
//将读入的字符串写入数组ch中

puts的功能是将字符串输出到标准终端上,并将字符串的终结符\0转换为换行符\n。其原型如下:

int puts(char *str)

puts输出的形式有很多种,在下面给大家展示一下:

char ch[] = "I love China !";
char *str = "I love China !";
puts(ch);//输出后自动换行
puts(str);//没有格式符
puts("I love China !");//不用加换行符

通过上述一连串原理的介绍和代码的展示,也不难发现,scanf和printf可以输入和输出一个及以上的字符,但是都需要加入格式符,但是puts和gets一次只可以接收一个字符,但是他们不用加入回车和格式符,属于各有各的方便之处,只是后面一种输入输出方式比前一种的限制性要强一点,只可以运用在字符串中,而前一种无论是字符串,还是int,double型都可以使用。

给大家看一下我写题的时候遇到的一个混合型代码,同时包含两种输入输出方式:

#include <stdio.h>

int main() {
	char a1[5], a2[5], a3[5], a4[5];
	printf("请从键盘输入字符串:");
	scanf("%s%s", a1,a2);
	gets(a3);
	gets(a4);
	puts(a1);
	puts(a2);
	puts(a3);
	puts(a4);
	return 0;
}

本次知识参考了书本《程序设计基础》

本次代码参考了书本《C程序设计试题汇编》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

箬渊凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值