“C语言的输出和输入”的版本间的差异
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的11个中间版本) | |||
第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 函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。 | ||
+ | |||
+ | 地址列表中给出各变量的地址。地址是由运算符“&”后跟变量名组成的。<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); | |
− | scanf | + | 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> | ||
+ | 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