Press "Enter" to skip to content

字符串和格式化输入输出

//talkback.c -- 一个能为您提供一些信息的对话程序
#include<stdio.h>
#include<string.h> //使用string头文件,提供strlen()函数原型
#include<stdlib.h>
#define DENSITY 62.4
/*预处理定义常量DENSITY
 * 预处理允许定义常量,只需在顶部添加定义。
 * 被称为编译时代入法(compile-time subsitution).
 * 这个被定义的常量称为明显常量(manifest constant)
 * 请注意格式!赋值没有=号,结尾没有;号。#define 常量 值
 * 常量的符号名要全部大写,这是C的传统。
 * 另外,也可使用c_或k_标示常量。
 * 常量的符号名也必须符合变量命名规则。
 * #define 也可以用于定义字符和字符串常量。
 * 前者用单引号,后者用双引号。*/
int main(void){
    float weight,volume;
    int size,letters;
    char name[40];  //有40个字符的一元数组

    //printf()和scanf()被称为输入输出函数,简称为I/O函数。
    printf("Hi! What's your first name?\n");
    scanf("%s",name);   //注意,name没有使用&前缀
    printf("%s,what's your weight in pounds?\n",name);
    scanf("%f",&weight);
    /*使用scanf()来提取变量的值,前面需要加&。
     * 使用scan()把一个字符串读入数组中时,不需要加&*/
    size = sizeof name;
    letters = strlen(name);
    /*strlen()函数以字节为单位给出数据的大小。
     * string.h文件主要包含了与字符串有关的函数原型。*/
    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 in.\n",size);
    /*打印较长的字符串可用的方法有:
    * 使用多个printf();
    * 使用反斜线(/)符号和回车键来结束一行;  
    * 使用字符串连接的方法。如果在一个用双引号引起来的
    字符串后面跟有另一个用双引号起来的字符串,
    而且二者之间仅用空白字符分隔,
    那么C会把该组合当做一个字符串来处理*/
    return 0;
}

标志意义
-项目是左对齐。
+若为正,则显示带+号字符;若为负,则显示带减号字符 。
空格值为正,则显示前导空格;若为负,则带减号。
#转换说明的可选形式,若为%x和%X格式,则以0x或者0X开始。
0对于数字格式用零,而不是空格填充字段宽度。
//width.c   --  字段宽度
#include <stdio.h>
#define PAGES 931
int main(void)
{
    printf("*%-d*\n",PAGES);
    printf("*%2d*\n",PAGES);
    printf("*%10d*\n",PAGES);
    printf("*%-10d*\n",PAGES);
    printf("*%+d*\n",PAGES);
    printf("*%#X*\n",PAGES);
    return 0;
}