#include
#include
#define DENSITY 62.4//人体密度
int main(void)
{
float weight, volume;
int size, letters;
char name[40];//name是一个可以容纳40个字符的数组
printf("Hi! What is your first name?");
scanf("%s", name);
printf("%s, what is your weight in pounds?\n", name);
scanf("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n",
name, volume);
printf("Also, your first name has %d letters,\n", letters);
printf("and we have %d bytes to store it.\n", size);
return 0;
}
C语言没有专门用于储存字符串的变量类型,字符串都被储存再 char 类型的数组中。数组由连续的存储单元组成,字符串中的字符被储存在相邻的存储单元中,每个单元储存一个字符。
字符数组的末尾为\0.这是空字符,空字符不是0,他是非打印字符,其ASKⅡ码值是(或等价于0).C语言用它标记字符串的结束,C中字符串一定以空字符结束。
字符数组容量一定要比待储存字符串中字符多1
#include
#define PRAISE "You are an extraordinary being."
int main(void)
{
char name[40];
printf("What is your name?");
scanf("%s", name);
printf("Hello, %s, %s\n", name, PRAISE);
return;
}
注意:scanf() 如果输入姓名为 Vector Ye 那么只会读取 Vector,当他遇到第一个空白(空格, 制表符, 或者换行符)时就不在读取输入
一般而言根据 %s 转换说明,scanf()只会读取字符串中的一个单词,而不是一整句。
区别之一在于 'x' 是基本类型char(),而"x"是派生类型(char数组);
区别之二是"x" 实际上是由两个字符组成:'x' 和 空字符 \0
该函数给出字符串中的字符长度。
#include
#include
#define PRAISE "You are an extraordinary being."
int main(void)
{
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello, %s. %s", name, PRAISE);
printf("Your name of %zd letters occupies %zd memory cells.\n"
, strlen(name), sizeof (name));
printf("The phrase of praise has %zd leters", strlen(PRAISE));
printf("and occupies %zd memory cells.\n", sizeof PRAISE);
return 0;
}
strlen() 和 sizeof() 同样会得到字符串中的字符数,(包括空格和标点)。然而sizeof() 运算符给出的数更大,是因为他那字符串末尾不可见的空字符也计算在内。
<注意>该程序并没有明确告诉计算机要给字符串预留多大空间,因此他必须计算双引号内的字符数。
%zd 转换说明用于 sizeof() 和 strlen()
使用符号常量可读性会更好,例如:
circleference = pi * diameter
circleference = 3.14159 * daimeter
在程序顶部加一行代码,定义一个常量:
#include
#define AREA 0.25
int main(void)
{
... ...
return 0;
}
<注意格式>:
#define 常量名 符号常量的值
不加冒号,同时常量名应该大写(C语言规范)
#include
#define PI 3.14159
int main(void)
{
float area;
float circum;
float radius;
printf("What is the radius of your pizza?\n");
scanf("%f", &radius);
area = PI * radius * radius;
circum = 2 * PI * radius;
printf("your parameters are as follows:\n");
printf("circumference = %1.2f, area = %1.2f.\n", circum, area);
return 0;
}
语句中的 %1.2f 表明,结果被四舍五入为两位小数输出。float默认输出为6位
其中1,为最小宽度最小宽度是表示输出的最少字符数。在C程序的printf()函数中,可以使用"%!N(MISSING)d"或"%!N(MISSING)f"格式化输出,其中N表示输出的最小宽度,若实际输出字符数不足N,则会在左侧用空格填充,直到输出字符数达到N为止。 如果实际输出字符数大于最小宽度,则最小宽度设置会被忽略。在C程序的printf()函数中,如果输出的字符数大于最小宽度,则不会在左侧用空格填充。
C90新增了const关键字,用于限定一个变量为只读,无法更改
const int MONTHS = 12;
C头文件limits.h 和 float.h 分别提供了与整数类型和浮点类型大小限制相关的详细信息。
(18条消息) c语言打印格式大全,C语言printf()输出格式大全_武耀峰的博客-CSDN博客 &P81页
转换说明修饰符:p83页
使用示例:
#include
#define PAGES 959
int main(void)
{
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES);
printf("*%10d*\n", PAGES);
printf("*%-10d*\n", PAGES);
return 0;
}
输出结果为:
浮点型使用示例:
#include
int main(void)
{
const double RENT = 3852.99;//只读变量
printf("*%f*\n", RENT);
printf("*%e*\n", RENT);
printf("*%4.2f*\n", RENT);
printf("*%3.1f*\n", RENT);
printf("*%10.3f*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%+4.2f*\n", RENT);
printf("*%010.2f*\n", RENT);
return 0;
}
输出结果为:
本例第一个转换说明是 %f。在这种情况下,字段宽度和小数点后面的位数均为默认系统设置,即字段宽度是容纳待打印数字所需的位数和小数点后打印6位数字。
字符串示例:
#include
#define BLURB "Authentic imitation!"
int main(void)
{
printf("[%2s]\n", BLURB);
printf("[%24s]\n", BLURB);
printf("[%24.5s]\n", BLURB);
printf("[%-24.5s]\n", BLURB);
return 0;
}
输出:
把二进制格式储存在计算机中的值转换成一系列字符(字符串)以便于显示。
实际上,转换说明是翻译说明
计算机根据变量类型将值放入栈中,
printf()函数根据转换说名从栈中读取值。
#include
#define BLURB "Authentic imitation!"
int main(void)
{
int a = 212;
int rv;
rv = printf("%d F is water's boiling point.\n", a);
printf("The printf() function printed %d characters.\n", rv);
return 0;
}
第一个语句执行了两项任务,第一项为打印,第二项为赋值。
注意:计算针对所有字符数,包括空格和不可兼得换行符\n
#include
int main(void)
{
//①
printf("Here is one way to print a");
printf("long string\n");
//②
printf("Here is another way to print a \
long string\n");
//③
printf("Here is the newest way to print a "
"long string.\n");/*ANSI C*/
return 0;
}
方法一:使用多个printf()
方法二:使用反斜杠( \ ),和 Enter键组来断行
方法三:ANSI C引入的字符串连接,在两个用双引号括起来的字符串之间使用空白符隔开,C编译器会把多个字符串看成一个字符串
scanf()要做的是将输入的字符串转换成整数,浮点数,字符或字符串。
在参数列表中,printf()函数使用变量,常量和表达式而scanf()函数使用指向变量的指针,记住以下两个规则:
①如果使用scanf()函数 读取基本变量类型的值,在变量名前加上一个&
②如果使用scanf()把字符串读入字符数组中,不要使用&
#include
int main(void)
{
int age;
int assets;
char pet[30];
printf("Enter your age, assert, and favorite pet.\n");
scanf("%d %f", &age, &assets);
scanf("%s", pet);
printf("%d $ %.2f %s\n", age, assets, pet);
return 0;
}
%s : scanf()会读取除空白以外的所有字符。scanf() 跳过跳过空白开始读取第一个非空白字符,并保存非空白字符直到再次遇到空白。
注意:当scanf() 将字符串放进指定数组时,他会在字符序列的末尾加上'\0',让数组中的内容称为一个C字符串
说明:
除了%c 其他转换说明都会自动跳过待输入值前面所有的空白。对于 %c 在格式字符串中添加一个空格字符会有所不同,例如:
如果将一个空格放到 %c 前面,scanf() 便会跳过空格,从第一个非空白字符开始读取,scanf("% c", &ch)
scanf()返回成功读取的橡树。如果没有读取任何项,且需要读取一个数字而非用户输入一个数值字符串,scanf()便返回0.
当scanf()检测到"文件结尾"时,会返回EOF.
在printf()中:
#include
int main(void)
{
unsigned width, precision;
int num = 256;
double weight = 242.5;
printf("Enter a field width:\n");
scanf("%d", &width);
printf("The number is : %*d:\n", width, num);
printf("Now, enter a width and a precision:\n");
scanf("%d %d", &width, &precision);
printf("Weight = %*f\n", width, precision, weight);
printf("Done\n");
return 0;
}
注意:变量 width 提供字段宽度,number 时待打印的数字。因为转换说明中 * 在d前面,所以在printf()参数列表中,width在 number前面。
在scanf()中:
#include
int main(void)
{
int n;
printf("Please enter three integers:\n");
scanf("%*d %*d %d", &n);
printf("The last integer was %d\n", n);
return 0;
}
跳过两个整数,将第三个整数拷贝给n