二.C++中C语言的输入输出
一. getchar 和 putchar 函数
1.getchar()
getchar 从单词的直译来看,就是 给我一个字符,事实也正因如此,这是一个读取字符的函数,但他的原型是 int getchar(void) ,如果输入的是字符会返回他的ASCII码值,我们存的时候要用 int 类型,在需要输出字符的时候再强制转换,这是为了兼容性考虑,他来自c语言,所以要想在c++使用,需要包含对应的头文件: <cstdio>
#include <iostream> #include <cstdio> using namespace std; int main() { int ch; ch = getchar(); cout << ch << endl; cout << (char)ch << endl; return 0; }getchar 只要是字符就都会读取,包括空格
2.putchar()
putchar() 就是将字符打印到屏幕上,一般和getchar搭配使用
#include <iostream> #include <cstdio> using namespace std; int main() { int ch; ch = getchar(); putchar(ch); return 0; }二.printf 和 scanf
1.printf
printf 的意思是把参数打印到屏幕上,和 c++ 的 cout 很像,其中 print 是打印的意思,后面的 f 是表示 format (格式化) 表示他可以定制输出文本的格式,他来自 c 语言,所以要加上头文件<cstdio>
#include <cstdio> int main() { printf("hello world"); return 0; }printf 如果想换行,需要在文本的后面加上 \n,而 c++ 则可以用 endl 和 /n
1.2 占位符
在 printf 中,可以使用占位符,占位符是值这个地方可以用其他的值来代替
#include <cstdio> int main() { printf("我有%d个苹果", 2); return 0; }我有%d个苹果,%d 就是占位符,占位符的前面一律都是百分号%,百分号的后面根据不同的字母表示不同功能的占位符,比如这里的 %d 就表示这里的值必须是一个整数,在文本逗号的后面的数字,表示这里要替换的值
在文本里占位符可以多次使用
#include <cstdio> int main() { printf("我有%d个苹果和%d个梨",2,3); return 0; }这里要注意的是,文本逗号后要替换的数,会与前面的占位符保持一致,按照顺序,一个对应一个
占位符有很多,这里举例常用的几个
%d -- 整数
%lld -- long long int 整数
%f -- 小数(包含 float 和 double 两种)
%Lf -- long double 小数
%c -- 字符
%s -- 字符串
1.3 格式化输出
前面提到 printf 的 f 代表可以格式化输出,可以限定占位符中的最小宽度,意思是最小要输出到多少宽度,如果不够,就会用空格来补
#include <cstdio> int main() { printf("%6d",1234); return 0; }可以看到前面空了两格,并且他是向左对齐的,如果想向右对齐呢,只需要加上个 - 就行了
#include <cstdio> int main() { printf("%-6d",1234); return 0; }如果是对于小数,那么就是对包括小数在内的所有数字进行最小宽度的限定,比如
#include <cstdio> int main() { printf("%10f",123.45); return 0; }可以看到,对于小数而言,补齐的方法是在小数位上面增加 0 而不会左右对齐
在表示小数的占位符中,我们还可以进行限定小数位的操作,只需要在 % 后加上 . + 你想要限定多少小数位,例如
#include <cstdio> int main() { printf("%.2f",1.2345); return 0; }还可以把限定最小宽度和限定小数位来结合使用
#include <cstdio> int main() { printf("%7.2f",1.2345); //最小宽度是7位,小数点保留两位 return 0; }除此之外,最小宽度和小数位数还能用 * 星号来代替,根据上面那个例子
#include <cstdio> int main() { printf("%*.*f",7,2,1.2345); return 0; }按顺序下来,通过传参 7 和 2,跟 7.2f 的用法一样
2.scanf
scanf 是输入语句,和 c++ 中的 cin 一样,来自 c 语言,要包含<cstdio>
#include <cstdio> int main() { int i;//可不初始化 scanf("%d",&i); printf("%d",i); return 0; }使用 scanf 的使用要取地址,必须使用 & 来给对应的变量取地址
可以多次读取变量
#include <cstdio> int main() { int a, b, c, d; scanf("%d%d%d%d",&a, &b, &c, &d); printf("%d %d %d %d",a, b, c, d); return 0; }scanf 中常用的占位符和 printf 类似
%d -- 整数
%lld -- long long int 整数
%f -- float 类型小数
%lf -- double 类型小数
%Lf -- long double 小数
%c -- 字符
%s -- 字符串
但要注意的是,在 printf 中 %f 是包含 float 类型和 double 类型的,但是 scanf 中还区分了 float 类型和 double 类型
使用 %c 字符占位符的时候,要记得空格也是字符,是会读取到的,如果不想让scanf读取到字符,就在字符占位符的前面加上一共空格 scanf(" %c",&a); 这样不管有多少个空格就都会跳过
