
编程语言学习(二) ??三种语言的基本输入输出
概述:本章主要研究怎样读取各种形式的数据,怎样实现格式化输出的问题。
??
(一)读取各种形式的数据
??
一、C语言读取各种形式的数据
主要通过scanf()、getchar()、 gets()三个函数来实现:
(1)??scanf: ??int??scanf(格式化字符串,指针....);??返回顺利读到自己的值的变量数
注意点1:由于第二个参数后面开始就是指针了,所以读取字符串不用取地址符
注意点2:double类型用%lf ,float用%f,不可混淆否则值会错的。
注意点3:scanf会将tab space enter三个值认为一个值就是分隔符,代码:
float q,m;
??scanf("%f %f",&q,&m); //两个%f直接用了tab隔开 输入3_3依然顺利
??printf("%f%f",q,m); ??//输出3.00003.0000
注意点4:scanf读取过程中会略去分隔符,但是最后一个enter会被保留下来在缓冲区中。我们可以利用getchar()来证明这一点
(2)??getchar()函数
getchar()函数可以从缓冲区当中取出一个字符,返回回来。为了验证scanf的注意点4,我们有这样的代码:
int a,b;
scanf("%d %d",&a,&b); ??//输入33_33
putchar(getchar());
printf("%s","sb"); ??//输出 ??33 33
??
sb
可见33 33与sb之间多了一个\n,这个\n正是scanf剩下的。
(3)??gets函数 我们在读取含有空格键的字符串的时候,scanf就很不合适了,为此我们有了gets函数:
char a[20]={0};
scanf("%s",a); ????//输入 hello world
gets(a);
printf("%s",a);
putchar(getchar()); ????//被要求再次输入 我们输入88
printf("%s","sb");
??
输出界面:
hello world //本行是输入行
_world88 ??// 88也是我们的输入 scanf拿走了hello 留下_world
8sb ??//getchar()z只读了一个字节
我们可以看见,此处putchar(getchar())并没有换行,而是要求我们输入,可见gets函数不像scanf那样会留下尾巴,一口气全打包带走了,清空了缓冲区。
??
二、C++读取各种形式的数据
主要是三个函数cin,cin.get(),cin.getline()函数。
(1)??cin
单独的cin和scanf的功能是类似的,如下两行代码:
short??a = 0;
cin >>??a;
cout <<hex <<??a;??????//iomainp是需要的
//putchar(getchar());
if??(getchar() == '\n') {
cout <<??"is space!";
cout <<??endl;
}
cout <<??"sb"??<<??endl;
??
输入656563
控制台界面:
656563 ??//我故意让656563大于short的最大值32767 发现输出报错为0了,这个逻辑是对的
0is space! ????//可以看到cin与scanf一样留下了一个回车键,被我读取到了
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-81056-1.html
大学很多寝室都会生各种虫