1.printf()
转换说明 | 输出 |
---|---|
%c | 单个字符 |
%d | 有符号十进制整数 |
%e/%E | 浮点数,e记法 |
%f | 浮点数十进制 |
%p | 指针 |
%s | 字符串 |
%u | 无符号十进制整数 |
%% | 打印一个百分号 |
带修饰符的%
例子:
格式:
printf(格式字符串,待打印项1,待打印项2,.......);
例:
#include<stdio.h>
int main(void) {
char name[] = "hqw";
int age = 19;
printf("my name is %s,age is %d,3*2=%d", name,age,3*2);
return 0;
}
printf()返回值:
#include<stdio.h>
int main(void) {
char name[] = "hqw";
int age = 19;
int pr;
pr = printf("my name is %s,age is %d,3*2=%d \n", name,age,3*2);
printf("%d", pr);
return 0;
}
包括空格和换行符
打印较长的字符串:
两种方式
注意第二种前面不要空格,否则会带空格
2. scanf()
获取用户输入
如果用scanf()读取基本变量类型的值,在变量名前加上一个&;
如果用scanf()把字符串读入字符数组中,不要使用&。
在每个输入项之间需要输入至少一个换行符、空格或制表符即可,但有一例外:%c
示例:
#include<stdio.h>
int main(void)
{
int age;
float assets;
char pet[30];
printf("Enter your age, assets, and favourite pet.\n");
scanf("%d %f", &age, &assets);
scanf("%s", pet);
printf("%d $%.2f %s\n", age, assets, pet);
return 0;
}
格式字符串中的普通字符
scanf()函数允许把普通字符放在格式字符串中。除空格字符外的普通字符必须与输入字符串严格匹配,例:
scanf(”%d,%d", &n, &m);
用户必须像下面这样输入两个整数:
88,121
但是,由于scanf()会跳过整数前面的空白,所以下面两种也可以:
88, 121
和
88,
121
格式字符串中的空白意味着跳过下一个输入项前面的所有空白,例如:
scanf("%d ,%d", &n, &m);
以下的输入格式都没问题:
88,121
88 ,121
88 , 121
除了%c,其他转换说明都会自动跳过待输入值前面的所有空白,因此scanf("%d%d", &n, &m)和scanf("%d %d", &n, &m);是一样的。对于%c,scanf("%c", &ch)从输入中的第1个字符开始读取,而scanf(" %c", &ch)则从第1个非空白字符开始读取。
scanf()的返回值
scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串,scanf()便返回0。当scanf()检测到“文件结尾”时,会返回EOF(EOF是stdio.h中定义的特殊值,通常用#define指令把EOF定义为—1)。
示例:
#include<stdio.h>
int main(void)
{
int age;
float assets;
char pet[30];
int sc1, sc2;
printf("Enter your age, assets, and favourite pet.\n");
sc1 = scanf("%d %f", &age, &assets);
sc2 = scanf("%s", pet);
printf("%d $%.2f %s\n", age, assets, pet);
printf("%d %d", sc1,sc2);
return 0;
}
第一项输入错误类型,返回了0
*修饰符
1.printf()
#include<stdio.h>
int main(void)
{
printf("%*d\n", 10, 200);
printf("%*.*f", 10, 2, 252.2);
return 0;
}
对于%*d,后面第一个参数指定字符的宽度,小于则不会生效;第二个为输出参数
对于%*.*f,后面第一个参数指定字符的宽度,小于则不会生效;第二个参数为小数点位数,第三个为输出参数
2.scanf()
*会使scanf()跳过这一项
示例:
#include<stdio.h>
int main(void)
{
int number;
scanf("%*d %*d %d", &number);
printf("%d", number);
return 0;
}
getchar()与putchar()
每次处理一个字符
ch = getchar(); // 效果等同于scanf("%c", &ch)
putchar(); // 效果等同于printf("%c", ch)