目录
1.标准文件
C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。
C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。
scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。
2.printf
2.1基本用法
1. printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
2.printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。 为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \n 。 如:
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
#include <stdio.h>
int main(void)
{
printf("Hello\nWorld\n");
printf("Hello\n");
printf("World\n");
return 0;
}
3.printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。
2.2占位符
#include <stdio.h>
int main()
{
char ch = 'A';
char str[20] = "abcdef";
float flt = 10.234;
int no = 150;
double dbl = 20.123456;
printf("字符为 %c\n", ch);
printf("字符串为 %s\n" , str);
printf("浮点数为 %f\n", flt);
printf("整数为 %d\n" , no);
printf("双精度值为 %lf \n", dbl);
return 0;
}
以上是一些常见的打印输出类型,这些大家是要掌握的
注意:printf ()中参数与占位符的关系是一一对应的,如果有 n 个占位符, printf () 的参数就应该有 n + 1 个,因为前面格式化字符串也算一个参数。 如果参数个数少于对应的占位符, printf () 可能会输出内存中的任意值
2.3输出格式
2.3.1 限定宽度
#include <stdio.h>
int main()
{
printf("%5d\n", 123); // 输出为 " 123"
return 0;
}
#include <stdio.h>
int main()
{
printf("%12f\n", 123.45);// 输出 " 123.450000
return 0;
}
2.3.2总是显⽰正负号
默认情况下, printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可以在占位符的 % 后⾯加⼀个 + 。
#include <stdio.h>
int main()
{
printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12
return 0;
}
2.3.3限定⼩数位数
#include <stdio.h>
int main()
{
printf("Number is %.2f\n", 0.5);//输出Number is 0.50
return 0;
}
2.3.4输出部分字符串
2.4返回值
printf函数的返回值类型是int(在进行嵌套使用时,其打印格式是%d),返回的是打印的字符的个数。
#include <stdio.h>
int main()
{
printf("%d",printf("%d",43);//输出 432
return 0;
}
这里涉及到了函数的嵌套调用的有关知识,当程序执行最外层的printf的时候,其打印内容是printf("%d",43)的返回值,而在最外层printf函数得到printf("%d",43)的返回值之前,会先执行printf("%d",43),也就是会先打印 43,43共2个字符,所以printf("%d",43)返回整型2
3.scanf
3.1基本用法
scanf("%d", &i);
4.scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响 scanf() 解读数据。另外,⽤⼾使⽤回⻋键,将输⼊分成⼏⾏,也不影响解读。
3.2返回值
3.2.1介绍
3.2.2应用
scanf的返回值在我们做题时遇到了多组输入的情况时会用到,下面将会通过一个例子来告诉大家这个知识点是如何使用的。
题目:
描述:
据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。
输入描述:
多组输入,每行输入包括一个整数表示的智商。
输出描述:
针对每行输入,输出“Genius”。
示例
输入:160 输出:Genius
代码:
#include <stdio.h>
int main()
{
int a=0;
while (scanf("%d", &a) != EOF) //或while (scanf("%d", &a) == 1)
{
if(a>=140)
{printf("Genius\n");
}
}
return 0;
}
在上方的代码中使用了while循环和scanf的返回值实现了多组输入,同时要是代码能够成功运行scanf的返回值应与输入数据的个数相同或者不为EOF(-1).
3.3占位符
#include <stdio.h>
int main()
{
char name[11];
scanf("%10s", name);
return 0;
}
3.4赋值忽略符
有时,输⼊可能不符合预定的格式。
scanf("%d-%d-%d", &year, &month, &day);
scanf("%d%*c%d%*c%d", &year, &month, &day);