输入输出

2023/11/8

C++语言标准函数库提供了许多标准输入、输出函数,本节将介绍 6 个最基本的输入、输出函数:字符输入 getchar,字符输出 putchar,格式化输入 scanf,格式化输出 printf,流输入 cin,流输出 cout

# 字符输入函数 getchar

getchar函数是用于接收从键盘输入的单个字符数据。它是一个无参函数,其语法格式为:getchar()

说明:

  1. 通常将输入的字符赋予一个字符变量,构成赋值语句。
  2. getchar函数只能接受单个字符,输入数字也按字符处理。
  3. 当输入多于一个字符时,getchar函数只接收第一个字符。
  4. getchar函数等待用户输入,直到按下回车键才结束,可用于暂停程序的运行,直到输入回车键。
  5. 如果在程序中连续使用两个以上的 getchar 函数,应该一次性输入所需字符,最后再按回车键,否则会把回车作为一个字符传给后面的 getchar() 函数。

在 C++中,getcharputchar是 C 标准库提供的函数,而不是 C++标准库提供的。虽然在一些 C++编译器中可以直接使用这些函数,但为了确保最大的兼容性,建议在使用它们时引入对应的头文件。

如果你在使用 getcharputchar 时不引入头文件,但程序没有出现错误,那可能是因为你的编译器对这种情况进行了一些隐式处理。但这并不是一种可靠的做法,因为在其他编译器或环境中,可能会导致编译错误。

为了编写更具可移植性的代码,最好还是在使用 getcharputchar 时显式引入头文件,即 #include <cstdio>,以确保代码在各种环境中都能正常工作。

示例:

#include <cstdio>

int main() {
    char ch;
    printf("Please enter a character: ");
    ch = getchar(); // 从键盘读取一个字符
    printf("You entered: %c\n", ch);
    return 0;
}

上述示例演示了如何使用 getchar 函数从键盘读取一个字符,并将其存储在字符变量 ch 中,然后将该字符输出到屏幕上。用户需要按下回车键以结束输入。

# 字符输出函数 putchar

putchar 函数用于将一个字符输出到标准输出设备(通常是屏幕)。它接受一个字符作为参数,将其输出到屏幕上。其语法格式为:putchar(character)

说明:

  1. putchar 函数接受一个字符参数或以整数形式表示字符的 ASCII 码值。
  2. 通常用单引号括起来的字符常量作为参数传递给 putchar

示例:

#include <cstdio>

int main() {
    char ch = 'A';
    printf("Outputting character 'A': ");
    putchar(ch); // 输出字符 'A' 到屏幕
    printf("\n");
    return 0;
}

上述示例演示了如何使用 putchar 函数将字符 'A' 输出到屏幕上。

# 格式化输入函数 scanf

scanf 函数用于从标准输入设备中读取数据,并根据格式化字符串的指令将数据赋值给指定的变量。它允许你以特定的格式输入数据。其语法格式为:scanf(const char* format, ...)

说明:

  1. scanf 函数的第一个参数是一个格式字符串 format,它包含了格式控制符和空白字符,用于指定要读取的数据的类型和格式。格式字符串可以包含以下类型的格式控制符:

    常见格式符:

    • %d%i: 用于输入十进制整数。
    • %u: 以无符号十进制形式输入十进制整数。
    • %o: 用于输入八进制整数。
    • %x%X: 用于输入十六进制整数。
    • %c: 用于输入单个字符。
    • %s: 用于输入字符串,以空格为分隔符。
    • %f: 用于输入实数(浮点数),可以包括小数点。
    • %e: 与 %f 相同,用于输入指数形式的实数。

    附加格式说明符:

    • 1(字母): 用于长整型数和双精度实数。
    • %hd, %ho, %hx: 用于短整型数,八进制和十六进制形式。
    • 域宽(一个整数):指定输入所占列宽。您可以在格式符前使用数字表示最大字段宽度。
    • *: 表示对应输入量不赋给一个变量。这在某些情况下很有用,允许跳过不需要的输入项。
  2. scanf 函数的第二个及以后的参数是要存储读取数据的变量地址,这些参数必须与格式字符串中的格式控制符相匹配。数据将按照格式字符串中的指定格式进行解析,并存储到相应的变量地址中。& 用于创建指向变量的指针,允许 scanf 将数据正确存储在该变量的内存位置。

示例:

#include <cstdio>

int main() {
    int integerValue;
    float floatValue;

    // 从标准输入中读取一个整数和一个浮点数
    printf("Enter an integer and a floating-point number: ");
    // 这里 &integerValue 表示变量 integerValue 的地址,scanf 将从标准输入中读取一个整数
    // 并将其存储到 integerValue 的地址指向的内存位置。
    scanf("%d %f", &integerValue, &floatValue);

    printf("You entered: Integer = %d, Float = %f\n", integerValue, floatValue);

    return 0;
}

上面是一个简单的示例,演示如何使用 scanf 函数从标准输入中读取整数和浮点数:

需要注意的是,scanf 函数在读取输入时会忽略空白字符(空格、制表符、换行符等),并根据格式字符串的格式控制符提取相应的数据。如果输入与格式字符串不匹配,scanf 可能会出现问题。因此,必须确保输入数据的格式与格式字符串中的格式一致,以避免潜在的错误。

# 格式化输出函数 printf

printf 函数用于将格式化的数据输出到标准输出设备。你可以使用格式化字符串来指定输出的样式,以及要输出的数据。其语法格式为:printf(const char* format, ...)

  1. printf 函数的第一个参数是格式字符串 format,它包含了格式控制符和文本,用于指定要输出的文本以及如何格式化输出的数据。格式字符串可以包含以下内容:

    • 普通文本:除格式控制符外的任何文本都会原样输出。

    • 格式控制符:以百分号 % 开头,后跟一个字符,用于指定要输出的数据的类型和格式。
      常见的格式控制符
      printf 函数的格式符用于指定输出的数据类型和格式。下面是一些常见的 printf 格式符及其说明:

      整数格式符:

      • %d%i: 以带符号的十进制形式输出整数。
      • %u: 以无符号十进制形式输出整数。
      • %x%X: 以十六进制无符号形式输出整数(%X 输出大写字母 A-F)。
      • %o: 以八进制无符号形式输出整数。
      • %c: 输出一个字符。
      • %s: 输出字符串。

      浮点数格式符:

      • %f: 以小数形式输出单精度或双精度浮点数(默认保留 6 位小数)。
      • %e%E: 以指数形式输出单精度或双精度浮点数(默认保留 6 位小数)。
      • %g%G: 自动选择 %f%e%E 格式中输出宽度较小的一种,并省略无意义的小数位。

      宽度和精度修饰符:

      • %mld: 指定整数输出的宽度位,左边补空格,m 为宽度。
      • %-mld: 同上,但左对齐输出。
      • %0md%0mld: 宽度不足时左边补零。
      • %*d%*f: 宽度由参数指定,例如 printf("%*d", width, value);

      长整数和长宽度修饰符:

      • %ld: 用于输出长整数(长整型)。

      • %lld: 用于输出长长整数(长长整型)。

      • %hd: 用于输出短整数(短整型)。

        对于 printf 函数中的 %f%s 格式符,以下是详细的说明:

        %f 格式符:

        • %f: 以小数形式输出浮点数。
        • %m.nf: 总宽度为 m(包括小数点和整数部分),其中小数部分的位数为 n
        • %-m.nf: 同上,左对齐输出,不足宽度时右边补空格。

        %s 格式符:

        • %s: 按实际宽度输出一个字符串。
        • %ms: 指定宽度为 m,当字符串宽度不足 m 时,左侧补空格,宽度大于 m 时,按实际宽度输出。
        • %-ms: 同上,左对齐输出,不足宽度时右侧补空格。
        • %m.ns: 输出占 m 个字符位置,但最多输出 n 个字符,左侧补空格。
        • %-m.ns: 同上,左对齐输出,不足宽度时右侧补空格。
  2. ... 表示可以接受多个参数,根据格式化字符串中的指令,将要输出的数据插入到相应位置。

示例:

#include <cstdio>

int main() {
    int age = 30;
    printf("My age is %d years old.\n", age); // 输出带格式的文本
    return 0;
}

上述示例演示了如何使用 printf 函数输出带有格式的文本。格式化字符串 "My age is %d years old.\n" 中的 %d 指令表示将整数变量 age 的值插入到字符串中,然后输出到屏幕上。

# 流输入函数 cin

cin 是 C++中的标准输入流对象,用于从键盘或其他输入源中获取数据。你可以使用 >> 运算符将数据读取到不同类型的变量中。

说明:

  • cin 是 C++标准库提供的输入流对象,用于从标准输入设备(通常是键盘)获取数据。
  • 你可以使用 >> 运算符将数据按指定格式读取到不同类型的变量中。
  • cin 可以用于读取各种数据类型,如整数、浮点数、字符等。

示例:

#include <iostream>
using namespace std;
int main() {
    int num;
    cout << "Please enter an integer: ";
    cin >> num; // 从键盘读取一个整数
    cout << "You entered: " << num << endl;
    return 0;
}

上述示例演示了如何使用 cin 输入流对象从键盘读取一个整数,并将其存储在整数变量 num 中,然后将该整数输出到屏幕上。用户需要按下回车键以结束输入。

# 流输出函数 cout

cout 是 C++中的标准输出流对象,用于将数据输出到屏幕或其他输出目标。你可以使用 << 运算符将数据输出到 cout

说明:

  • cout 是 C++标准库提供的输出流对象,用于将数据输出到标准输出设备(通常是屏幕)。
  • 你可以使用 << 运算符将数据按指定格式输出到 cout
  • cout 可以用于输出各种数据类型,如整数、浮点数、字符等。

示例:

#include <iostream>
using namespace std;
int main() {
    int age = 30;
    cout << "My age is " << age << " years old." << endl;
    return 0;
}

上述示例演示了如何使用 cout 输出流对象将带有格式的文本输出到屏幕上。通过使用 << 运算符,你可以将整数变量 age 的值插入到文本中,然后输出到屏幕上。

# 几种输入输出格式的几点说明

  1. cincout 在 Dev C++中只能调用 <iostream> 库,而其他输入输出格式需要调用 <cstdio> 库或 <stdio.h> 库。

  2. cincout 属于 C++的概念,它们涉及输入输出流,而 scanfprintf 属于 C 的概念,是 C 语言的标准输入/输出库中的函数。在性能方面,scanfprintfcincout 更高效。特别是对于大规模数据的输入输出,通常情况下更适合使用 scanfprintf

  3. 对于普通数据的输入输出,cincout 更加方便,而在格式化方面,scanfprintf 更容易使用。不过需要注意,cin 的效率比 scanf 低很多,特别在输入数据量超过 20 万条时,性能差距变得非常明显,甚至在 100 万条数据时,使用 cin 可能会导致超时。

  4. scanfprintf 需要指定数据类型,而 cincout 能够自动识别变量的数据类型,因此在进行输入输出时,不需要额外指定数据类型。这使得 cincout 更易用,但 scanfprintf 在输入输出时需要更多的格式控制。

总结:cincout 适用于方便的、自动类型识别的输入输出,但可能在性能上不如 scanfprintf,特别在大规模数据处理时。scanfprintf 需要更多的格式控制,但在性能上更高效,特别对于大数据处理是更佳的选择。

# 重点小结

  1. cincout 是 C++ 标准库提供的输入输出流对象。

    • cin 用于从标准输入设备(通常是键盘)获取数据。
    • cout 用于将数据输出到标准输出设备(通常是屏幕)。
    • 你可以使用 >> 运算符将数据从 cin 读取到变量中,以及使用 << 运算符将数据从变量输出到 cout
  2. getcharputchar 是 C 标准库提供的字符输入和字符输出函数。

    • getchar 用于接收从键盘输入的单个字符数据。
    • putchar 用于将一个字符输出到标准输出设备。
  3. scanfprintf 是 C 标准库提供的格式化输入和格式化输出函数。

    • scanf 用于从标准输入设备中读取数据,并根据格式化字符串的指令将数据赋值给指定的变量。
    • printf 用于将格式化的数据输出到标准输出设备。它允许你使用格式化字符串指定输出的样式和数据。
  4. 选择使用 cin/cout 还是 scanf/printf 取决于需求和性能考虑。

    • cin/cout 适用于方便的、自动类型识别的输入输出。
    • scanf/printf 更高效,适用于需要更多格式控制的情况和大规模数据处理。
上次更新: 2024-10-19 10:01:51