一、按格式输入输出
1.printf
(1)介绍
#include <stdio.h>//头文件
int printf(const char *format, ...);
功能:按照格式向终端输出
参数:多参
返回值:输出类型的个数(一般不用)
(2)格式
%d | int |
%c | char |
%f | float |
%lf | double |
%e | 指数形式 |
%s | 字符串 |
%p | 地址 |
%o | 八进制 |
%#x | 十六进制 |
2.scanf
#include <stdio.h>//头文件
int scanf(const char *format, ...);
功能:按照格式从终端输入
参数:多个
返回值:正确输入的个数
与printf不同的是,scanf需要取地址符来确认变量输入的地址:
int a = 0;
scanf("%d", &a);
printf("%d\n", a);
二、按字符输入输出
1.getchar
(1)介绍
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:输入字符的ASCII码值
(2)使用
int i = getchar();
printf("%c\n", i);
2.putchar
(1)介绍
int putchar(int c);
功能:向终端输出一个字符
参数:输出字符的ASCII码值
返回值:输出字符的ASCII码值
(2)使用
int a = getchar();
putchar(a);
putchar('\n');
三、垃圾字符回收机制
我们在输入的过程中,空格或回车常常使我们的输入过程受阻,因此需要一些方法将我们不想输入的字符作为垃圾回收:
1.通过空格回收一个或多个空格
#include <stdio.h>
int main(int argc, char const *argv[])
{
char a, b;
scanf("%c%c", &a, &b);
printf("%c %c\n", a, b);
}
输入与输出结果:可以看到,我输入了W 空格 Q,而只输出了W和空格,因此空格已经影响了我们的输入。
#include <stdio.h>
int main(int argc, char const *argv[])
{
char a, b;
scanf("%c %c", &a, &b);
printf("%c %c\n", a, b);
}
输入与输出结果:,可以看到,输入空格已经不影响输出了,与上面代码不同的只是两个%c之间的空格。
即,在scanf函数中,在两个格式之间加一个空格可以回收一个或多个空格。
2.%*c回收任意一个字符
#include <stdio.h>
int main(int argc, char const *argv[])
{
char a, b;
scanf("%c%*c%c", &a, &b);
printf("%c %c\n", a, b);
}
运行结果:
%*c不止可以回收空格,只要是字符在这个位置都可以回收。
3.getchar
一般是在循环中使用
#include <stdio.h>
int main(int argc, char const *argv[])
{
while (1)
{
char a;
scanf("%c", &a);
printf("%c\n", a);
}
}
执行结果:可以看到,a输入输出以后,又输出了两个空行,才执行的下一次程序,这是因为,我们输入时必须使用回车作为输入结束,而回车又被作为了输入字符放入外存区,执行完打印a后由于循环没结束而继续执行,但在下一轮执行时,会先识别暂存区,第一次换行相当于执行了一次scanf输入'\n',第二次换行相当于执行了打印'\n',所以b会在第三行接收,所以此空格为垃圾字符,在scanf后写上getchar(),识别缓存区的'\n'而不执行,因此可以回收。
#include <stdio.h>
int main(int argc, char const *argv[])
{
while (1)
{
char a;
scanf("%c", &a);
printf("%c\n", a);
getchar();
}
}
执行结果:。
目录