C 语言输入和输出(I/O)
                           
天天向上
发布: 2025-04-01 23:35:59

原创
434 人浏览过

在 C 语言中,输入和输出(I/O)是与用户和程序之间交互的基本方式。C 提供了标准的输入输出库(stdio.h)来进行这些操作。下面是 C 语言输入输出的详细介绍。

1. 标准输入与输出库:stdio.h

C 语言的标准输入输出函数都位于 stdio.h 头文件中。因此,在使用输入输出功能时需要包含这个头文件:

#include <stdio.h>

2. 标准输出:printf()

printf() 函数用于格式化输出数据到标准输出设备(通常是屏幕)。其基本语法为:

int printf(const char *format, ...);
  • format:格式化字符串,用于控制输出的格式。
  • ...:可变参数,根据格式字符串提供具体的数据。

示例:

#include <stdio.h>

int main() {
    int age = 25;
    printf("Hello, World!\n");       // 输出普通字符串
    printf("Age: %d\n", age);         // 输出整型数据
    printf("Height: %.2f\n", 5.9);   // 输出浮点数据,保留两位小数

    return 0;
}

输出:

Hello, World!
Age: 25
Height: 5.90

常见格式化输出符号:

  • %d:输出整数(十进制)
  • %f:输出浮点数
  • %c:输出字符
  • %s:输出字符串
  • %.2f:输出浮点数,保留 2 位小数
  • %x:输出整数的十六进制形式

3. 标准输入:scanf()

scanf() 函数用于从标准输入设备(通常是键盘)读取数据,并将其存储到变量中。其基本语法为:

int scanf(const char *format, ...);
  • format:格式字符串,指明输入数据的类型和格式。
  • ...:变量的地址,用来存储输入的数据。

示例:

#include <stdio.h>

int main() {
    int age;
    float height;

    printf("Enter your age: ");
    scanf("%d", &age);  // 读取整数
    printf("Enter your height: ");
    scanf("%f", &height);  // 读取浮点数

    printf("Age: %d, Height: %.2f\n", age, height);
    return 0;
}

输出:

Enter your age: 25
Enter your height: 5.9
Age: 25, Height: 5.90

常见格式化输入符号:

  • %d:读取整数
  • %f:读取浮点数
  • %c:读取字符
  • %s:读取字符串(会忽略空格)

4. 读取字符串:gets()fgets()

在 C 中,读取字符串的常用函数有 gets()fgets()。然而,gets() 不安全,容易导致缓冲区溢出问题,因此推荐使用 fgets()

4.1 gets() (不推荐使用)

char str[100];
gets(str);  // 读取一行输入,直到遇到换行符或 EOF

gets() 函数会读取整行输入,包括空格,直到遇到换行符。它不检查数组边界,容易导致缓冲区溢出。

4.2 fgets() (推荐使用)

#include <stdio.h>

char str[100];
fgets(str, sizeof(str), stdin);  // 安全地读取一行输入

fgets() 更加安全,因为它允许指定最大读取字符数,从而防止缓冲区溢出。

示例:

#include <stdio.h>

int main() {
    char name[50];

    printf("Enter your name: ");
    fgets(name, sizeof(name), stdin);  // 使用 fgets 读取字符串

    printf("Hello, %s", name);
    return 0;
}

输出:

Enter your name: John Doe
Hello, John Doe

5. 输出到文件:fprintf()fputs()

除了标准输出,C 还提供了将数据输出到文件的功能。fprintf() 函数用于向文件输出格式化数据,fputs() 用于输出字符串。

5.1 fprintf()

FILE *f = fopen("output.txt", "w");
fprintf(f, "Hello, File!\n");  // 向文件输出
fclose(f);

5.2 fputs()

FILE *f = fopen("output.txt", "w");
fputs("Hello, File!\n", f);  // 向文件输出字符串
fclose(f);

6. 从文件读取:fscanf()fgets()

fscanf() 函数与 scanf() 类似,但用于从文件中读取数据。fgets() 同样也可以用于从文件中读取字符串。

6.1 fscanf()

FILE *f = fopen("input.txt", "r");
int num;
fscanf(f, "%d", &num);  // 从文件中读取整数
fclose(f);

6.2 fgets()

FILE *f = fopen("input.txt", "r");
char str[100];
fgets(str, sizeof(str), f);  // 从文件中读取一行
fclose(f);

7. 输入输出的错误处理

在使用 scanf()printf()fscanf() 等函数时,通常需要检查是否成功执行。例如,scanf() 函数会返回成功读取的项目数量,如果不等于预期的数量,则输入失败。

示例:

#include <stdio.h>

int main() {
    int age;
    printf("Enter your age: ");
    if (scanf("%d", &age) != 1) {
        printf("Input error!\n");
    } else {
        printf("Your age is: %d\n", age);
    }
    return 0;
}

8. 总结

  • 标准输出:使用 printf() 函数输出数据。
  • 标准输入:使用 scanf() 函数获取用户输入。
  • 字符串输入输出:使用 gets()fgets()
  • 文件输入输出:使用 fprintf()fscanf()fputs()fgets()

通过合理使用这些输入输出函数,可以更有效地与用户交互或处理文件数据。

发表回复 0

Your email address will not be published. Required fields are marked *