今天想要粗浅记录的主要内容是说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程序设计试题汇编》