【深入浅出】C语言中的数据流:了解流程、类型和操作

博客昵称:吴NDIR
个人座右铭:得之淡然,失之坦然
作者简介:喜欢轻音乐、象棋,爱好算法、刷题
其他推荐内容:AI前言:ChatGPT的不足
其他内容推荐:五种排序算法

【前言】

C语言中的数据流是指程序中数据的输入和输出流程,对于程序的正常执行和数据处理起着至关重要的作用。在C语言中,数据流常常被抽象为一些特定的数据类型和操作方式,以实现数据的读写和转换等任务。本文将详细介绍C语言中的数据流类型、操作和使用方法,并提供一些实用的例子和技巧。比如:

 while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);

一、C语言中的数据流类型


  在C语言中,数据流主要有三种类型:标准输入流、标准输出流和标准错误流。其中,标准输入流(stdin)用于从键盘或文件中读取数据,标准输出流(stdout)用于向屏幕或文件中输出数据,标准错误流(stderr)用于输出程序中的错误信息。这三种数据流是C语言中最基本和常用的数据类型之一,因为它们可以满足程序中数据的输入和输出需求。
数据流 { 标准输入流 标准输出流 标准错误流 数据流\begin{cases}标准输入流\\标准输出流\\标准错误流\end{cases} 数据流 标准输入流标准输出流标准错误流

二、C语言中的数据流操作

  • C语言中的数据流操作主要包括以下几个方面:
  1. 标准输入输出函数

  C语言提供了一些标准输入输出函数,如printf、scanf、getchar、putchar和puts等,用于处理标准输入输出流的读写操作。这些函数可以根据数据类型和格式要求,将数据从输入流中读取或将数据写入输出流中。

最简单的例子:使用printf函数输出“Hello World!”字符串

#include <stdio.h>

int main()
{
    
    
    printf("Hello World!");
    return 0;
}
  1. 文件输入输出函数

  C语言中文件输入输出函数主要包括fopen、fclose、fread、fwrite、fseek和ftell等,用于打开、关闭、读取和写入文件等操作。这些函数可以对文件进行操作,实现对文件的读写和转换等功能。

举例:使用fopen函数打开“test.txt”文件,并将“Hello World!”字符串写入到文件中

#include <stdio.h>

int main()
{
    
    
    FILE *fp = fopen("test.txt", "w");
    fprintf(fp, "Hello World!");
    fclose(fp);
    return 0;
}
  1. 标准流重定向

C语言中的标准流重定向可以将标准输入输出流指向不同的设备或文件,以实现程序中数据的输入输出。例如,我们可以将标准输出流重定向到文件中,这样在程序执行时,输出的数据就会被写入到文件中,而不是在屏幕上输出。

举例:将标准输出流重定向到“test.txt”文件中,并输出“Hello World!”字符串

#include <stdio.h>

int main()
{
    
    
    FILE *fp = fopen("test.txt", "w");
    fprintf(stdout, "Hello World!");
    fclose(fp);
    return 0;
}

三、使用C语言数据流的技巧

在使用C语言数据流时,需要注意以下一些技巧和注意事项:

  1. 避免数据类型不匹配

  在输入输出数据时,我们需要确保数据类型的匹配正确,否则可能会导致数据转换出错或程序运行异常。例如,在使用printf函数输出浮点数时,需要使用%f格式符号,并将数据类型转为double类型,否则可能会导致数据精度丢失或输出格式不正确。

举例:使用printf函数输出浮点数

#include <stdio.h>

int main()
{
    
    
    double num = 3.14;
    printf("num = %f", num);
    return 0;
}
  1. 处理文件打开错误

在使用文件输入输出函数时,我们需要注意处理文件打开错误的情况。如果文件打开失败,可能会导致程序崩溃或数据丢失等问题。因此,在打开文件时,应该检查文件是否打开成功,如果失败,则需要进行相应的错误处理。

举例:使用fopen函数打开文件,并进行错误处理

#include <stdio.h>

int main()
{
    
    
    FILE *fp = fopen("test.txt", "w");
    if(fp == NULL)
    {
    
    
        printf("Open file failed.\n");
        return 0;
    }
    fprintf(fp, "Hello World!");
    fclose(fp);
    return 0;
}
  1. 处理缓冲区数据

在进行数据输入输出时,缓冲区的数据处理也是需要注意的问题。缓冲区数据可能会影响程序的效率和数据读写的顺序,因此,我们需要及时清除缓冲区数据,并确保数据的读写顺序正确。

举例:使用fflush函数清除缓冲区数据

#include <stdio.h>

int main()
{
    
    
    FILE *fp = fopen("test.txt", "w");
    fprintf(fp, "Hello World!");
    fflush(fp);
    fclose(fp);
    return 0;
}
  1. 最后再回到刚开始的例子:
 while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);

【注意】

scanf()函数返回值分为3种:
(1)返回正整数。表示正确输入参数的个数。
(2)返回整数0。表示用户的输入不匹配,无法正确输入任何值。
(3)返回-1。表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复多次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

  1. 关于~的作用解析:

1、在Windows下,用户按下CTRL+Z(会看到一个^Z字符),会停止输入流,scanf会返回-1。
2、-1的补码为11111111 11111111 11111111 11111111 一共4个字节。
3、~ 是C语言中的按位取反,因此~(-1)结果为00000000 00000000 00000000 00000000刚好为整数0的补码。
4、因此当输入Ctrl+Z时,scanf会返回-1,while(~-1)==while(0),0为假,退出while循环。

猜你喜欢

转载自blog.csdn.net/m0_73589720/article/details/130190097