“C语言的输出和输入”的版本间的差异
Jihongchang(讨论 | 贡献)  | 
				Jihongchang(讨论 | 贡献)   | 
				||
| (未显示同一用户的12个中间版本) | |||
| 第11行: | 第11行: | ||
输出和输入函数的使用。  | 输出和输入函数的使用。  | ||
| + | === 输出 ===  | ||
printf 函数称为格式输出函数,其关键字最末一个字符 f 就是“格式”(format)的意思。其功能是按用户指定的格式,把指定的数据显示到显示器上。  | printf 函数称为格式输出函数,其关键字最末一个字符 f 就是“格式”(format)的意思。其功能是按用户指定的格式,把指定的数据显示到显示器上。  | ||
| − | printf 函数调用的一般形式为:  | + | printf 函数调用的一般形式为:<syntaxhighlight lang="c">  | 
| − | |||
printf("格式控制字符串", 输出列表);  | printf("格式控制字符串", 输出列表);  | ||
| − | + | </syntaxhighlight>  | |
其中格式控制字符串用于指定输出格式。格式控制串可由'''<big>格式字符串</big>'''和'''<big>非格式字符串</big>'''两种组成。  | 其中格式控制字符串用于指定输出格式。格式控制串可由'''<big>格式字符串</big>'''和'''<big>非格式字符串</big>'''两种组成。  | ||
| 第37行: | 第37行: | ||
“%f”表示按浮点数输出等。  | “%f”表示按浮点数输出等。  | ||
| − | 非格式字符串在输出时原样打印,在显示中起提示作用。  | + | 非格式字符串在输出时原样打印,在显示中起提示作用。<syntaxhighlight lang="c">  | 
| + | #include<stdio.h>  | ||
| + | int main()  | ||
| + | {  | ||
| + | 	int a = 10;  | ||
| + | |||
| + | 	printf("十进制:%d 八进制:%o 十六进制:%x \n", a, a, a);  | ||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight><syntaxhighlight lang="console">  | ||
| + | 十进制:10 八进制:12 十六进制:a  | ||
| + | </syntaxhighlight>  | ||
| + | |||
| + | <syntaxhighlight lang="c">  | ||
| + | #include<stdio.h>  | ||
| + | |||
| + | int main()  | ||
| + | {  | ||
| + | 	int a = 10;  | ||
| + | 	float ft = 12.25;  | ||
| + | 	char ch = 'a';  | ||
| + | |||
| + | 	printf("a = %d ft = %f ch = %c \n", a, ft, ch);  | ||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight><syntaxhighlight lang="console">  | ||
| + | a = 10 ft = 12.250000 ch = a  | ||
| + | </syntaxhighlight>  | ||
| + | |||
输出列表中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。  | 输出列表中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。  | ||
| + | === 输入 ===  | ||
| + | scanf 函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。  | ||
| + | |||
| + | scanf 函数的一般形式:<syntaxhighlight lang="c">  | ||
| + | scanf("格式控制字符串", 地址列表);  | ||
| + | </syntaxhighlight>  | ||
| + | |||
| + | 其中,格式控制字符串的作用与 printf 函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。  | ||
| − | scanf   | + | 地址列表中给出各变量的地址。地址是由运算符“&”后跟变量名组成的。<syntaxhighlight lang="c">  | 
| + | #include<stdio.h>  | ||
| + | |||
| + | int main()  | ||
| + | {  | ||
| + | 	char ch;  | ||
| + | 	int a;  | ||
| + | 	float ft;  | ||
| + | 	scanf("%c %d %f", &ch, &a, &ft);  | ||
| + | |||
| + | 	printf("ch = %c a = %d ft = %f \n", ch, a, ft);  | ||
| + | |||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight>此时编译会报错:  | ||
| + | |||
| + | 严重性	代码	说明	项目	文件	行	禁止显示状态  | ||
| + | |||
| + | 错误	C4996	'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	hello	E:\record\2022\10\9\hello\hello.cpp	10  | ||
| + | |||
| + | |||
| + | 加入宏“#define _CRT_SECURE_NO_WARNINGS 1”后:<syntaxhighlight lang="c">  | ||
| + | #define _CRT_SECURE_NO_WARNINGS 1  | ||
| + | #include<stdio.h>  | ||
| + | |||
| + | int main()  | ||
| + | {  | ||
| + | 	char ch;  | ||
| + | 	int a;  | ||
| + | 	float ft;  | ||
| + | 	scanf("%c %d %f", &ch, &a, &ft);  | ||
| + | |||
| + | 	printf("ch = %c a = %d ft = %f \n", ch, a, ft);  | ||
| + | |||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight>编译运行并依次输入“x”“空格”“12”“空格”“12.25”:<syntaxhighlight lang="console">  | ||
| + | x 12 12.25  | ||
| + | ch = x a = 12 ft = 12.250000  | ||
| + | </syntaxhighlight>'''<big>注意:使用 scanf 函数进行输入时不要给“\n”</big>'''<syntaxhighlight lang="c">  | ||
| + | #define _CRT_SECURE_NO_WARNINGS 1  | ||
| + | #include<stdio.h>  | ||
| − | scanf   | + | int main()   | 
| + | {  | ||
| + | 	int a, b, c;  | ||
| + | 	scanf("%d %d %d", &a, &b, &c); // 12 23 34  | ||
| + | 	printf("a = %d b = %d c = %d \n", a, b, c);  | ||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight>因为 scanf 函数中的格式字符串中占位符是以“空格”间隔的,所以在输入时也要输入空格,最后键入回车就代表输入完毕:<syntaxhighlight lang="console">  | ||
| + | 12 23 34  | ||
| + | a = 12 b = 23 c = 34  | ||
| + | </syntaxhighlight>如果 scanf 函数中提供的格式字符串中占位符是以“逗号”间隔:<syntaxhighlight lang="c">  | ||
| + | #define _CRT_SECURE_NO_WARNINGS 1  | ||
| + | #include<stdio.h>  | ||
| − | scanf("  | + | int main()   | 
| + | {  | ||
| + | 	int a, b, c;  | ||
| + | 	scanf("%d,%d,%d", &a, &b, &c); // 12 23 34  | ||
| + | 	printf("a = %d b = %d c = %d \n", a, b, c);  | ||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight>那么在编译运行时就要输入逗号才能正确输入:<syntaxhighlight lang="console">  | ||
| + | 12,23,34  | ||
| + | a = 12 b = 23 c = 34  | ||
| + | </syntaxhighlight>如果再以空格分隔录入就会录入失败:<syntaxhighlight lang="console">  | ||
| + | 12 23 34  | ||
| + | a = 12 b = -858993460 c = -858993460  | ||
| + | </syntaxhighlight>  | ||
| + | === 海伦公式的实现 ===  | ||
| + | <syntaxhighlight lang="c">  | ||
| + | #define _CRT_SECURE_NO_WARNINGS 1  | ||
| + | #include<stdio.h>  | ||
| + | #include<math.h>  | ||
| − | + | int main()  | |
| + | {  | ||
| + | 	float a = 0, b = 0, c = 0, p = 0, s = 0;  | ||
| + | 	scanf("%f %f %f", &a, &b, &c);  | ||
| + | 	p = (a + b + c) / 2;  | ||
| + | 	s = sqrt(p * (p - a) * (p - b) * (p - c));  | ||
| + | 	printf("s = %f \n", s);  | ||
| + | 	return 0;  | ||
| + | }  | ||
| + | </syntaxhighlight><syntaxhighlight lang="console">  | ||
| + | 3 4 5  | ||
| + | s = 6.000000  | ||
| + | </syntaxhighlight>  | ||
2022年10月28日 (五) 09:58的最新版本
https://www.bilibili.com/video/BV1vR4y1H7MY/?p=9
示例:输入三角形的三条边,计算三角形的面积。使用海伦公式计算
开平方函数:
https://zh.cppreference.com/w/c/numeric/math/sqrt
输出和输入函数的使用。
输出
printf 函数称为格式输出函数,其关键字最末一个字符 f 就是“格式”(format)的意思。其功能是按用户指定的格式,把指定的数据显示到显示器上。
printf 函数调用的一般形式为:
printf("格式控制字符串", 输出列表);
其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。
格式字符串是以 % 开头的字符串,在 % 后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。
如:
“%d”表示按十进制整型输出;
“%o”表示按八进制整型输出;
“%x”表示按十六进制整型输出;
“%ld”表示按十进制长整型输出;
“%c”表示按字符型输出;
“%f”表示按浮点数输出等。
非格式字符串在输出时原样打印,在显示中起提示作用。
#include<stdio.h>
int main()
{
	int a = 10;
	printf("十进制:%d 八进制:%o 十六进制:%x \n", a, a, a);
	return 0;
}
十进制:10 八进制:12 十六进制:a
#include<stdio.h>
int main()
{
	int a = 10;
	float ft = 12.25;
	char ch = 'a';
	printf("a = %d ft = %f ch = %c \n", a, ft, ch);
	return 0;
}
a = 10 ft = 12.250000 ch = a
输出列表中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。
输入
scanf 函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf 函数的一般形式:
scanf("格式控制字符串", 地址列表);
其中,格式控制字符串的作用与 printf 函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。
地址列表中给出各变量的地址。地址是由运算符“&”后跟变量名组成的。
#include<stdio.h>
int main()
{
	char ch;
	int a;
	float ft;
	scanf("%c %d %f", &ch, &a, &ft);
	printf("ch = %c a = %d ft = %f \n", ch, a, ft);
	return 0;
}
此时编译会报错:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. hello E:\record\2022\10\9\hello\hello.cpp 10
加入宏“#define _CRT_SECURE_NO_WARNINGS 1”后:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	char ch;
	int a;
	float ft;
	scanf("%c %d %f", &ch, &a, &ft);
	printf("ch = %c a = %d ft = %f \n", ch, a, ft);
	return 0;
}
编译运行并依次输入“x”“空格”“12”“空格”“12.25”:
x 12 12.25
ch = x a = 12 ft = 12.250000
注意:使用 scanf 函数进行输入时不要给“\n”
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() 
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c); // 12 23 34
	printf("a = %d b = %d c = %d \n", a, b, c);
	return 0;
}
因为 scanf 函数中的格式字符串中占位符是以“空格”间隔的,所以在输入时也要输入空格,最后键入回车就代表输入完毕:
12 23 34
a = 12 b = 23 c = 34
如果 scanf 函数中提供的格式字符串中占位符是以“逗号”间隔:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() 
{
	int a, b, c;
	scanf("%d,%d,%d", &a, &b, &c); // 12 23 34
	printf("a = %d b = %d c = %d \n", a, b, c);
	return 0;
}
那么在编译运行时就要输入逗号才能正确输入:
12,23,34
a = 12 b = 23 c = 34
如果再以空格分隔录入就会录入失败:
12 23 34
a = 12 b = -858993460 c = -858993460
海伦公式的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
	float a = 0, b = 0, c = 0, p = 0, s = 0;
	scanf("%f %f %f", &a, &b, &c);
	p = (a + b + c) / 2;
	s = sqrt(p * (p - a) * (p - b) * (p - c));
	printf("s = %f \n", s);
	return 0;
}
3 4 5
s = 6.000000