赞
踩
我们在使用C语言的时候碰的最多的就是输入输出的函数,你们是否还记得我们写的第一个程序hello world,从这个程序开始我们就开始使用输入输出的函数,一直到你的代码生涯的结束这个输入输出都还在你的身边。
或许有人会觉得这个输入输出不是很简单嘛?基本就是用它来输入一下数据输出一下数据不就好了,有什么可注意的?如果你这样想了,那你大错特错了,其实并非如此,很多工程的问题都是出现在输入输出的函数,使用的时候不知道他的原理,然后导致其代码出现BUG。那么接下来我就带着你去看看这些都是怎么一回事。
这是输出函数,要使用它,那么我们要先引入系统头文件–#include <stdio.h>。
我们先从他的功能说起,这个函数是将原有的数据,按一定的格式输出显示于控制台。也就是它能以用户控制下的各种预定指定格式输出数据。
再来看看它的函数原型:int printf(“control string”, argument list);
返回值:返回输出字符的数量,如果错误会返回EOF。
函数的参数:有两个参数,其中 control string是顾名思义就是控制字符串,这个是用来控制输出格式的,它是由“ ”、纯文本、空格、格式命令、非打印字符组成。我们的控制字符都是放在“ ”中的,纯文本和空格在printf函数中它会原封不动的在屏幕中打印出来。而格式命令有很多,主要是用来限制一些变量、常量、表达式、函数(指有返回值的函数)的输出形式。具体的格式命令如下表:
单字符 | %c |
---|---|
字符串 | %s |
带符号的十进制整数 | %d(整数的数字位数) |
浮点数(十进制计数法) | %f(数字的整数部分如实输出。小数部分保留 6 位。如果小数部分不是 6 位,末尾填零;否则,四舍五入取到 6 位) |
浮点数(十进制计数法) | %lf |
浮点数(指数计数法) | %e(小数点左侧保留一位数字,右侧保留 6 位数字(与上面的 %f 相同)) |
浮点数(%f或者%e中较短的一个) | %g |
不带符号的十六进制整数 | %x |
不带符号的八进制整数 | %o |
不带符号的十进制整数 | %u |
再过来这个就是非打印字符了,非打印字符也很丰富,如下表:![]() | |
例如:printf(“5+2= %d\n”, 5+2); printf(“5+2= %f\n”, 5.0+2.0); | |
Printf(“hello, %s”, “world”); printf(“%%”); //输入百分号 | |
第二个就是参数列表了,在控制字符串中%有几个,参数就有几个,参数的类型要和控制字符串中的向匹配(注意:int和单个字符的输出%c可以相互转换),这里的参数可以是变量、常量、表达式、函数(指有返回值的函数)。 | |
重点来了,printf函数进阶(修饰符) | |
a.字符宽度修饰符,例如:printf(“%4d”,500); 可以用于浮点型、双精度型和字符数组型(字符串);范围宽度修饰符是一个整数,定义了数据项的最大范围宽度。 | |
b.“-” 修饰符,例如:printf(“%-d”,500); 数据项在范围内向左对齐,从范围最左侧的位置开始输出数据项。 | |
c.精度修饰符,例如:printf(“%.2f”,3.14159); 可以用在浮点型、双精度型或字符数组型(字符串)中;如果用在浮点型或双精度型数据中,数字字符串表示小数右侧最多可输出的数字位数。 | |
d.“0” 修饰符(填充在数字左边,右边无效,保证数据准确性);字段的默认填充符是空格。如果用户希望用零作为填充符,需要使用此修饰符。 | |
e.“*” 修饰符,如果用户不希望预先指定字段宽度,而希望程序来指定,则需要用到此修饰符。这个修饰符会有四舍五入的情况,如果要指定位数,那么我们要在数据前在加一个数据来表示我们的位数(printf("%.lf\n", 2, 80.0);不要忘记约束小数点后的要在*前面加小数点。printf("[%*.*f]",8,2,123.456);这里要注意在%*.*f这里的 . 前有一个这个表示约束整个数据的输出,也就是这个数据输出最多占8位,不足用空格补齐)。其实这个*修饰符只是做到可以用一个变量去替代他,然后就可以做到用程序去控制数据的输出格式。 |
这是输入函数,要使用它,那么我们要先引入系统头文件–#include <stdio.h>。
我们还是从这个函数的功能说起,用于接受数据,可以从键盘中输入数据。
它的函数原型:int scanf(“control string”, argument list);
返回值:输入成功的参数数量,否则返回0。
函数参数:这个也是由两部分组成,一个是控制字符串,另一个就是参数列表。
控制字符串,它也是由“ ”、纯文本、空格、格式命令、非打印字符组成。我们的控制字符串都是放在“ ”内,因为这个函数是用来作为输入的,所以当在控制字符串中插入了纯文本,空格,符号时,那么我们输入的时候也要在相同位置输入纯文本,空格,符号。(如:scanf(“%d n, %c”, &a, &b),在这里我们在输入的时候也要输入空格+n, 才行)。格式命令,同printf一样,不过他没有%g。非打印字符也是同上,不过我们在使用的时候不要使用到\n和\r(回车和制表符),主要是用到这个函数的话,那么你在结束这个scanf()函数的时候就要注意,你按一次回车不会结束这个函数,要按两次。
参数列表:在控制字符串中%有几个,参数就有几个,参数的类型要和控制字符串中的向匹配。我们这里的参数是变量的地址,如果是本身可以表示地址的,那么可以不需要用到&(数组)。(注意:int和单个字符的输出%c可以相互转)
我们以char类型输入数据的时候,以int类型输出,那么输出的是他的ASCII码,相同的如果我们以int输入数据,以char类型输出,那么输出的是对应ASCII码的数据。
我们在输入单个字符的时候要注意,我们最好把表示单个字符的格式命令(%c)放在最前面或者重新在写一个语句。因为我们在使用回车的时候,我们的缓存中会存储回车(\n),所以我们重新写的语句会把回车当做符号吸收,然后输出。所以我们在另外写一个语句前要先清除回车。用fflush(stdin)(这个函数可以清空输入缓存区,清空输出缓存区是用fflush(stdout))。要时刻记得scanf函数在使用完后,会在缓存区留下一个回车,可能会影响你下次的输入。
#include <stdio.h>
int a=0, b=0, c=0;
char demo=0;
scanf("%d %d %d",&a, &b, &c);
fflush(stdin); //这里就是先吸收回车,因为回车也是一个字符
scanf("%c", &demo);
记得引入头文件#include <stdio.h>
①函数原型:int getchar(void);//没有参数。
②函数功能:从终端输入一个字符。
③返回值:返回输入字符的ASCII码,可以使用字符变量或者整型变量接收。
注意:getchar()函数没有参数,但仍然必须使用括号。缓冲字符,直到用户按回车键。虽然可以输入多个字符,但函数只接受第一个字符,其它字符会被存储在缓存区里面,等下次在碰到要输入的时候再取出来用。因为这个返回的是int,所以我们在接受字符的时候,用char类型的也可以接收。
例如:
#include <stdio.h>
char a=0;
a = getchar();
记得当我输入:1 2 3 4 5 6时他只会把1赋值给a其它不会赋值,留在缓存区之中等待下一次输入的到来,因为getchar只会吸收一个字符。
还有就是这个输入函数会吸收回车,并储存在变量里。
①函数原型:int putchar(int c);
②函数功能:从终端输出一个字符, 且转换成ASCII码返回。
③函数参数:其中c要输出的字符,可以是字符型常量、字符型变量、整型常量、整型变量表达式、转义序列等。
④putchar() 的选项和效果,如下表:
在使用这个函数的使用要导入系统库#include <conio.h>
①函数原型:int getch (void);
②函数功能:从终端输入一个字符。
③返回值:返回输入字符的ASCII码,可以使用字符变量或者整型变量接收。
④注意,这个函数在使用的时候并不会回显输入的字符,也就是会有一个保密的作用。这个函数也会吸收回车并储存在变量里面,这个函数吸收的回车和之前的不太一样,前面储存的形式是‘\n’,用getch储存起来是‘\r’。
在使用这个函数的使用要导入系统库#include <conio.h>
① 函数原型:int putch (int c);
② 函数功能:从终端输出一个字符, 且转换成ASCII码返回。
③ 函数参数:其中c要输出的字符,可以是字符型常量、字符型变量、整型常量、整型变量表达式、转义序列等。
#include <stdio.h>
#include <conio.h>
int main()
{
char key[9] = {0};
char account[9] = {0};
int i=0, j=0;
printf("请输入你的账号:");
while(1)
{
account[i] = getch();
if(i==8)
{
if(account[i]=='\r')
break;
continue;
}
else
{
if(account[i]=='\r')
{
if(i==0)
{
printf("\n请输入你的账号:");
continue;
}
else
break;
}
else
{
if((account[i]>='0' && account[i]<='9') || (account[i]>='a' && account[i]<='z')||(account[i]>='A' && account[i]<='Z'))
{
putch(account[i]);
i++;
}
else
continue;
}
}
}
putch('\n');
printf("你输入的账号是:");
//这里是打印账号
for(j=0; j<i; j++)
putch(account[j]);
j=0;
printf("\n请输入你的密码:");
while(1)
{
key[j] = getch();
//对于回车的判断
if(key[j]=='\r')
{
//至少输入一个密文
if(j==0)
{
printf("\n请输入你的密码:");
continue;
}
else
break;
}
if(j==8) //达到输入的数量后不再输入
{
continue;
}
else
{
//输入的是数字
if((key[j]>='0' && key[j]<='9'))
{
putch('*');
j++;
}
else if((key[j]>='a' && key[j]<='z') || (key[j]>='A' && key[j]<='Z')) //输入的是字母
{
putch('*');
j++;
}
else //其他字符误操作
continue;
}
}
上面这个例子可以做到输入密码保密,而且输入的账号和密码只能是字母和数字。
到此对于这六个输入输出函数的使用就讲完了,讲起来是不是觉得很简单,不过等你用起来的时候就会觉得自己要注意的东西还有很多,所有的代码都是这样,只有等你自己真正用起来的时候才会知道他要注意什么,不然程序会出现BUG。记得去实操一遍哦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。