——————————————————————scanf的语法并举例说明
scanf是C语言中的一个标准输入函数,用于获取用户输入的数据,并赋值给变量。
——————基本语法:
scanf(format, variables);
其中,format是格式控制字符串,用于指定输入数据的格式,variables是变量名,用于存储输入的数据。
规则:
1. scanf函数通过格式控制字符串来确定要读取的数据类型和数量,并根据格式控制字符串中的格式符进行匹配。
2. 格式控制字符串中可以包含空格、制表符(\t)和换行符,用于忽略输入数据中的空白字符。
3. 可以使用多个格式控制符来读取多个数据,各个格式控制符之间可以用空格、制表符和换行符(回车键)分隔。
4. 当格式控制字符串中的格式符与输入的数据不匹配时,scanf函数会将匹配失败的数据留在输入缓冲区中,下一次读取时会再次尝试读取。
5. 格式控制符中的 % 后面可以加上数字,表示最大字段宽度,即读取的字符数不会超过该数字。
6. 在读取字符数组或字符串时,需要注意数组长度或字符串长度要足够大,以容纳输入的数据。
可以使用 % ns来指定最大字段宽度,其中n为数组或字符串长度。
7. 遇到空格、制表符或换行符时,scanf函数会将输入的数据视为结束。
8. 在读取字符数组或字符串时,可以使用 % [^\n]来指定读取到换行符之前的所有字符。
9. 换行符指的是:回车键用scanf要考虑越界,输入是否标准,而且还要注意一些字符不能读入,比如空格,/n,
如果之后还有用到输入缓冲区的内容,可以用getchar等函数清理缓冲区
例如,以下代码示例读取一个整数和一个浮点数:
//#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//int main()
//{
// int n;
// float i;
// printf("Enter an integer: ");//integer整数
// scanf("%d", &n);
// printf("Enter a floating point number: ");//floating point number浮点数
// scanf("%f", &i);
// printf("You entered: %d and %.0f\n", n, i);//%.2f:保留两位小数(自带四舍五入)//%.0f也可以使用,399.98——>400
// return 0;
//}
运行程序后,会提示用户逐个输入整数和浮点数,然后将输入的值打印出来。
在输入时,需要注意输入的数据类型要与格式控制字符串中的格式符匹配,否则可能发生错误。
换行符(回车键)
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//void main()
//{
// char str[40];
// printf("lnput a string:");
// scanf("%[^\n]", str);
// puts(str);
//}//输入字符串,会在敲回车时停止打印
//当使用scanf("%c", &ch);来读取一个字符时,%c会读取第一个字符,并将其赋值给变量ch。%c会按照下列规则工作:
1. %c会跳过任何空白字符(如空格、制表符、换行符等)。
2. %c会读取输入中的下一个字符,并将其赋值给变量。
3. %c不会自动在输入后面加入空字符'\0'。
4. %c会将换行符('\n')当做普通字符读取,而不会自动跳过。
//#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//int main()
//{
// char ch;
// printf("请输入一个字符:");
// scanf("%c", &ch);
// printf("您输入的字符是:%c\n", ch);
// return 0;
//}//只打印输入的第一个字符
制表符
制表符\t表示8个空格符是不准确的,实际上制表符的作用是使光标定位到一个新的位置,
新位置之前的输出占用的列数为8的倍数,即将光标移动至最接近8倍的地方,使之后的输出从光标处开始进行。
1、当\t之前的字符所占输出列数在0~7时,将光标定位至第9列。
2、当\t之前的字符所占输出列数在8~15时,将光标定位至第17列
//#include<stdio.h>
//void main() {
// printf("123456781234567812345678\n"); //line1
// printf("\ta\n"); //line2
// printf("1234\ta\n"); //line3
// printf("1234567\ta\n"); //line4
// printf("12345678\ta\n"); //line5
// printf("1234567812345\ta\n"); //line6
// printf("123456781234567\ta\n"); //line7
// printf("1234567812345678\ta\n"); //line8
//}
结果为:(a与1对齐)
123456781234567812345678
a
1234 a
1234567 a
12345678 a
1234567812345 a
123456781234567 a
1234567812345678 a