【C语言】---- 标准输入输出与字符输入输出

标准输入输出和字符输入输出是C语言中两种不同的输入输出方式,各自适用于不同的数据类型和场景,合理选择和使用这些函数可以提高程序的灵活性和效率。

1 标准输入输出函数

1.1 标准输入输出函数简介

标准输入输出是C语言中最常用的输入输出方式,它使用标准输入流和标准输出流来进行数据的输入和输出。标准输入流通常表示键盘输入,而标准输出流通常表示控制台输出。这些函数可以实现对文本数据的输入和输出,是C语言中最基本的输入输出方式。它们常用于与用户交互、显示程序输出结果等场景。

1.2 printf函数

printf 是 C 标准库中用于向标准输出流(通常是控制台)输出格式化字符串的函数之一。它的原型定义在 <stdio.h> 头文件中,具体格式如下:

int printf(const char *format, ...);

这个函数接受一个或多个参数:

  • format:一个以字符串形式表示的格式化控制字符串,用于指定输出的格式。该字符串可以包含普通字符和格式控制符。
  • ...:表示可变数量的参数列表,用于传递要格式化输出的数据。

printf 函数根据指定的格式控制字符串,将数据格式化输出到标准输出流,并返回输出的字符数(不包括终止的 null 字符)。如果发生错误,则返回一个负值。

在格式控制字符串中,格式控制符以 % 字符开头,后跟一个或多个字母,表示要输出的数据类型和格式。常见的格式控制符包括 %d(整数)、%f(浮点数)、%c(字符)、%s(字符串)等。

以下是一个示例代码,演示了如何使用 printf 函数输出格式化字符串:

#include <stdio.h>

int main() {
    int num = 10;
    float pi = 3.14159;
    char ch = 'A';
    char str[] = "Hello, world!";

    // 使用 printf 函数输出格式化字符串
    printf("整数:%d\n", num);
    printf("浮点数:%f\n", pi);
    printf("字符:%c\n", ch);
    printf("字符串:%s\n", str);

    return 0;
}

这个程序使用 printf 函数输出了一个整数、一个浮点数、一个字符和一个字符串。注意,在格式控制字符串中使用相应的格式控制符,并在后面的参数列表中传递要输出的数据。

1.2.1 printf函数的转换说明

转换说明 功能含义
%c 输出单个字符
%d 输出有符号十进制整数
%u 输出无符号十进制整数
%o 输出八进制整数
%x 输出十六进制整数0f
%X 输出十六进制整数0F
%f 输出十进制浮点数
%s 输出字符串
%p 输出指针
%% 输出%

1.2.2 printf函数中修饰符的使用

修饰符 功能含义
数字 最小字段宽度,如“%4d”
.数字 精度,如“%.2f”
- 左对齐
+ 有符号值若为正,则显示+;有符号值若为负,则显示-
空格 有符号值若为正,则显示空格;有符号值若为负,则显示-

1.2.3 printf函数的后缀转换符

printf函数中,回车符等转换符用于控制输出格式。下面是一些常用的转换符及其含义:

  • \n:换行符,用于在输出中换行。
  • \t:水平制表符,用于在输出中进行水平对齐。
  • \b:退格符,用于删除前一个字符。
  • \r:回车符,将光标移到当前行的开头,用于覆盖之前输出的内容。
  • \\:反斜杠,用于输出反斜杠字符本身。

例如,如果要在printf中打印一个换行符,可以使用\n转换符:

printf("Hello, world!\n");

这将在输出中打印 "Hello, world!" 后换行。

同样,如果要在输出中打印一个制表符,可以使用\t转换符:

    printf("Name:\tJohn\n");
    printf("Name:\tEd\n");
    printf("Name:\tJack\n");
    printf("Name:\tJey\n");

这将在输出中打印 "Name:",然后在水平方向上对齐 "John"。
image

类似地,其他转换符也可以用于控制输出格式。

1.3 scanf函数

scanf 是 C 标准库中用于从标准输入流(通常是键盘)读取格式化数据的函数之一。它的原型定义在 <stdio.h> 头文件中,具体格式如下:

int scanf(const char *format, ...);

这个函数接受一个或多个参数:

  • format:一个以字符串形式表示的格式化控制字符串,用于指定输入的格式。该字符串可以包含普通字符和格式控制符。
  • ...:表示可变数量的参数列表,用于传递要读取的数据。

scanf 函数根据指定的格式控制字符串,从标准输入流中读取数据,并根据格式进行解析和存储。成功读取的数据会按照相应的数据类型存储到对应的参数中。函数返回成功读取并存储的参数数量,如果读取失败或到达文件结尾,则返回一个负值。

在格式控制字符串中,格式控制符以 % 字符开头,后跟一个或多个字母,表示要读取的数据类型和格式。常见的格式控制符包括 %d(整数)、%f(浮点数)、%c(字符)、%s(字符串)等。

以下是一个示例代码,演示了如何使用 scanf 函数从标准输入流读取格式化数据:

#include <stdio.h>

int main() {
    int num;
    float pi;
    char ch;
    char str[100];

    // 使用 scanf 函数读取格式化数据
    printf("请输入一个整数:");
    scanf("%d", &num);

    printf("请输入一个浮点数:");
    scanf("%f", &pi);

    printf("请输入一个字符:");
    scanf(" %c", &ch); // 注意在 %c 前面加一个空格,以消耗掉之前的换行符

    printf("请输入一个字符串:");
    scanf("%s", str);

    // 输出读取到的数据
    printf("整数:%d\n", num);
    printf("浮点数:%f\n", pi);
    printf("字符:%c\n", ch);
    printf("字符串:%s\n", str);

    return 0;
}

这个程序使用 scanf 函数分别读取了一个整数、一个浮点数、一个字符和一个字符串,并将它们存储到相应的变量中。然后,使用 printf 函数输出这些变量的值。

2 字符输入输出函数

2.1 字符输入输出函数简介

字符输入输出是C语言中用于处理单个字符的输入输出方式,它不涉及格式化的字符串,而是处理单个字符的读取和输出。这些函数通常用于实现简单的字符处理逻辑,如编写字符处理函数、实现简单的控制台交互等。

2.2 putchar函数

putchar 是 C 标准库中用于向标准输出流(通常是控制台)输出一个字符的函数之一。它的原型定义在 <stdio.h> 头文件中,具体格式如下:

int putchar(int c);

这个函数接受一个参数:

  • c:要输出的字符,通常以整数形式传递给函数。

putchar 函数会将指定的字符写入到标准输出流,并返回写入的字符。如果成功写入字符,则返回字符的整数形式;如果发生错误,则返回一个表示错误的负值(通常是 EOF)。

以下是一个示例代码,演示了如何使用 putchar 函数向标准输出流输出一个字符:

#include <stdio.h>

int main() {
    char ch = 'A';

    // 使用 putchar 函数输出字符
    putchar(ch);

    // 输出换行符
    putchar('\n');

    return 0;
}

这个程序定义了一个字符变量 ch,然后使用 putchar 函数输出该字符。注意,putchar 函数也可以接受字符的整数形式作为参数,因此可以直接传递字符的 ASCII 码值。

2.3 getchar函数

getchar 是 C 标准库中用于从标准输入流(通常是键盘)读取一个字符的函数之一。它的原型定义在 <stdio.h> 头文件中,具体格式如下:

int getchar(void);

这个函数不接受任何参数。

getchar 函数会从标准输入流中读取一个字符,并返回读取到的字符的 ASCII 码值(作为一个整数)。如果在读取字符之前已经到达文件结尾或者发生了错误,则返回一个表示错误的负值(通常是 EOF)。

以下是一个示例代码,演示了如何使用 getchar 函数从标准输入流读取一个字符并输出它:

#include <stdio.h>

int main() {
    int ch;

    // 使用 getchar 函数读取一个字符
    ch = getchar();

    // 输出读取到的字符
    printf("你输入的字符是:%c\n", ch);

    return 0;
}

这个程序调用 getchar 函数读取一个字符,并将读取到的字符保存在变量 ch 中,然后使用 printf 函数输出这个字符。

posted @ 2024-04-27 17:49  晚风也温柔  阅读(3)  评论(0编辑  收藏  举报