写在前面:
在刚开始学习C语言的时候,用的比较多的两个库函数就是printf函数和scanf函数,但是好多同学在用的时候经常会犯一些没有注意到的小错误,但是有的时候这些小错误就是致命的.下来我们一起学习学习这两个C语言中的库函数.
一.printf函数
函数声明: 发送格式化输出到标准输出stdout
int printf(const char *format, ...)
函数返回值:如果成功则返回输出的字符总数,否则返回一个负数.
printf函数的调用格式为: printf("格式化字符串",参量表);
#include <stdio.h>
int main(){
int a = 10;
printf("%d\n",a);
}
#include <stdio.h>
int main()
{
char ch = 'A';
char str[20] = "www.runoob.com";
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);
printf("八进制值为 %o \n", no);
printf("十六进制值为 %x \n", no);
return 0;
}
规定符:
- %d 十进制有符号整数
- %u 十进制无符号整数
- %f 浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
- %e 指数形式的浮点数
- %x, %X 无符号以十六进制表示的整数
- %o 无符号以八进制表示的整数
- %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
- %p 输出地址符
- %lu 32位无符号整数
- %llu 64位无符号整数
二.scanf函数
函数声明:从标准输入stdin读取格式化输入.
int scanf(const char* format,...);
scanf函数的调用格式为: scanf("格式化字符串",参量表);
函数返回值: 如果成功则返回成功匹配和赋值的个数.如果到达文件末尾或发生读错误,则返回EOF.
format:格式化字符串,包含以下各项中的一个或多个字符:空格字符,非空格字符和format说明符.
scanf类型说明符:
很多同学刚开始学习scanf函数的时候,在vs编译器上经常会报下面的错误.很多同学会误以为是自己代码哪里存在语法错误.
This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
翻译下来就是: 此函数或变量可能不安全。考虑使用scanf_s代替。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS警告。
其实是vs编译器认为scanf函数不安全,需要替换为scanf_s使用.或者在文件的第一行进行宏定义:
#define _CRT_SECURE_NO_WARNINGS 1
实例1:
#include<stdio.h>
int main(void) {
int a,b,c;
printf("请输入三个数字:");
scanf_s("%d%d%d",&a,&b,&c);
printf("%d,%d,%d\n",a,b,c);
return 0;
}
解析:
- &a,&b,&c中的&是取地址运算符,分别获取这三个变量的内存地址
- %d%d%d是按照十进制格式输入三个数值.输入时,在两个数据之间可以用一个或多个空格,tab键,回车键分割.
- 注意:如果使用,分隔输入的%d,则相应的输入也需要添加,.前后的形式必须一,否则就会出错
输入数据时格式和格式化字符串不一致时就会出错,这里应该特别注意.
实例2:
#include<stdio.h>
int main(void){
char a,b,c;
printf("请输入三个字符:");
scanf_s("%c%c%c",&a,&b,&c);
printf("%c,%c,%c\n", a,b,c);
return 0;
}
注意:在用%c输入时,空格和"转义字符"均作为有效字符.
实例3:
注意:在较新版本vs中输入字符串时,需要给scanf函数指定一个参数,告诉编译器预留多大的空间来存储字符串sizeof()或直接给定一个数字大小,够用就可以.否则就会无输出程序直接结束.
#include <stdio.h>
int main(){
char str1[20], str2[30];
printf("请输入用户名:");
scanf_s("%s", str1,20); //20可以替换为sizeof(str1)
printf("请输入您的网站:");
scanf_s("%s", str2,20); //20可以替换为sizeof(str2)
printf("输入的用户名:%s\n", str1);
printf("输入的网站:%s", str2);
return(0);
}
没有失败,只是暂时的不成功.