精华内容
下载资源
问答
  • fromhttp://andylin02.iteye.com/blog/10840422011.06C语言标准输入流、标准输出流、标准错误输出流在Linux中,所有对设备和文件的操作都使用文件描述符来进行。Linux中一个进程启动时,都会打开3个文件标准输入...

    from http://andylin02.iteye.com/blog/1084042

    2011.06

    C语言中标准输入流、标准输出流、标准错误输出流

    在Linux中,所有对设备和文件的操作都使用文件描述符来进行。

    Linux中一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理。这三个文件分别对应文件描述符0、1、2。

    在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、 标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到的从终端输入或输出都不需要打开终端文件。系统自定义了3个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。

    标准输入流:stdin

    标准输出流:stdout

    标准错误输出流:stderr

    测试代码:

    Cpp代码 70523068_1.png#include 

    int main()

    {

    int a = 0;

    char szTmp[100] = {0};

    try

    {

    fprintf(stdout, "please input a:\n");

    fscanf(stdin, "%d", &a);

    fprintf(stdout, "a=%d\n", a);

    fprintf(stdout, "please input szTmp:\n");

    fscanf(stdin, "%s", szTmp);

    fprintf(stdout, "szTmp:%s\n", szTmp);

    }

    catch(...)

    {

    fprintf(stderr, "input error!");

    }

    return 0;

    }

    编译:

    g++ -o a a.cpp

    测试结果:

    ./a

    please input a:

    123

    a=123

    please input szTmp:

    aaaaaaaaaaaaaaaaaaaaaaa

    szTmp:aaaaaaaaaaaaaaaaaaaaaaa

    PS:相关文档

    stdin

    object

    FILE * stdin;

    Standard input stream

    The standard input stream is the default source of data for applications. It is usually directed to the input device of the standard console (generally, a keyboard).

    stdin can be used as an argument for any function that expects an input stream as one of its parameters, like fgets or fscanf.

    Although it is generally safe to assume that the source of data for stdin is going to be a keyboard, bear in mind that this may not be the case even in regular console systems, since stdin can be redirected at the operating system level. For example, many systems, among them DOS/Windows and most UNIX shells, support the following command syntax:

    myapplication < example.txt

    to use the content of the file example.txt as the primary source of data for myapplication instead of the console keyboard.

    It is also possible to redirect stdin to some other source of data from within a program using the freopen function.

    stdout

    object

    FILE * stdout;

    Standard output stream

    The standard output stream is the default destination of regular output for applications. It is usually directed to the output device of the standard console (generally, the screen).

    stdout can be used as an argument for any function that expects an output stream as one of its parameters, like fputs or fprintf.

    Although it is generally safe to assume that the default destination for stdout is going to be the screen, bear in mind that this may not be the case even in regular console systems, since stdout can be redirected at the operating system level. For example, many systems, among them DOS/Windows and most UNIX shells, support the following command syntax:

    myapplication > example.txt

    to redirect the output of myapplication to the file example.txt instead of the screen.

    It is also possible to redirect stdout to some other source of data from within a program using the freopen function.

    stderr

    object

    FILE * stderr;

    Standard error stream

    The standard error stream is the default destination for error messages and other diagnostic warnings. Like stdout, it is usually also directed to the output device of the standard console (generally, the screen).

    stderr can be used as an argument for any function that expects an output stream as one of its parameters, like fputs or fprintf.

    Although generally both stdout and stderr are associated with the same console output, applications may differentiate between what is sent to stdout and what to stderrfor the case that one of them is redirected. For example, it is frequent to redirect the regular output of a console program (stdout) to a file while expecting the error messages to keep appearing in the console screen.

    It is also possible to redirect stderr to some other destination from within a program using the freopen function.

    perror

    function

    void perror ( const char * str );

    Print error message

    Interprets the value of the global variable errno into a string and prints that string to stderr (standard error output stream, usually the screen), optionaly preceding it with the custom message specified in str.

    errno is an integral variable whose value describes the last error produced by a call to a library function. The error strings produced by perror depend on the developing platform and compiler.

    If the parameter str is not a null pointer, str is printed followed by a colon (:) and a space. Then, whether str was a null pointer or not, the generated error description is printed followed by a newline character ('\n').

    perror should be called right after the error was produced, otherwise it can be overwritten in calls to other functions.

    Parameters.

    str

    C string containing a custom message to be printed before the error message itself.

    If it is a null pointer, no preceding custom message is printed, but the error message is printed anyway.

    By convention, the name of the application itself is generally used as parameter.

    展开全文
  • 在 C 语言中,输入 意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置函数...标准输入输出C 语言把所有设备都当作文件。所以设备(比如显示器)被处理方式与文件相...

    在 C 语言中,输入 意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。

    C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。

    而 输出 意味着要在屏幕上、打印机上或任意文件中显示一些数据。

    C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。

    标准输入输出

    C 语言把所有的设备都当作文件。

    所以设备(比如显示器)被处理的方式与文件相同。

    C 语言把标准输入、标准输出、标准错误输出也当做文件。

    下面三个文件会在程序执行时自动打开,以便访问键盘和屏幕。

    标准文件

    文件指针

    设备

    标准输入

    stdin

    键盘

    标准输出

    stdout

    屏幕

    标准错误

    stderr

    您的屏幕

    C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。

    scanf() 函数用于从标准输入(键盘)读取并格式化

    printf() 函数发送格式化输出到标准输出(屏幕)

    范例 1 : printf() 函数的使用

    /**

    * file: main.c

    * author: 简单教程(www.twle.cn)

    */

    #include

    int main()

    {

    printf("Hello World!\nHello www.twle.cn!\n");

    return 0;

    }

    编译和运行上面的程序,输出结果如下

    $ gcc main.c && a.out

    Hello World!

    Hello www.twle.cn!

    范例解析

    printf() 用于格式化输出到屏幕。

    printf() 函数在 "stdio.h" 头文件中声明。

    stdio.h 是一个头文件 (标准输入输出头文件) and #include 是一个预处理命令,用来引入头文件。

    当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。

    return 0; 语句用于表示退出程序。

    范例 2 :使用 %d 格式化输出整数

    在 printf() 函数的引号中使用 "%d" (整型) 来匹配整型变量

    /**

    * file: main.c

    * author: 简单教程(www.twle.cn)

    */

    #include

    int main()

    {

    int age = 151926;

    printf("Number = %d\n", age);

    return 0;

    }

    编译和运行上面的代码,输出结果如下:

    $ gcc main.c && a.out

    Number = 151926

    范例 3 : 使用 %f 格式化输出浮点型数据

    在 printf() 函数的引号中 使用 %f 来匹配浮点型数据

    /**

    * file: main.c

    * author: 简单教程(www.twle.cn)

    */

    #include

    int main()

    {

    float f;

    printf("Please enter a number: ");

    scanf("%f",&f);

    printf("You have input = %f\n", f);

    return 0;

    }

    编译和运行上面的代码,输出结果如下

    $ gcc main.c && a.out

    Please enter a number: 3.14159257575343

    You have input = 3.141593

    getchar() 和 putchar() 函数

    从屏幕读取下一个可用的字符,并把它返回为一个整数。

    这个函数在同一个时间内只会读取一个单一的字符。

    把字符输出到屏幕上,并返回相同的字符。

    这个函数在同一个时间内只会输出一个单一的字符。

    这两个方法我们都可以在循环内使用,以便从屏幕上读取/输出多个字符

    范例

    /**

    * file: main.c

    * author: 简单教程(www.twle.cn)

    */

    #include

    int main( )

    {

    int c;

    printf( "Please enter some text :");

    c = getchar( );

    printf( "\nYou entered: ");

    putchar( c );

    printf( "\n");

    return 0;

    }

    当我们编译和运行上面的代码,它会等待输入一些文本,当我们输入文本并按下回车键时,程序会继续,但只会读取一个单一的字符

    $ gcc main.c -std=c11 && a.out

    Please enter some text :Hello www.twle.cn

    You entered: H

    gets() 和 puts() 函数

    从标准输入 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF

    把字符串 s 和一个尾随的换行符写入到标准输出 stdout

    范例: gets 和 puts 的演示

    /**

    * file: main.c

    * author: 简单教程(www.twle.cn)

    */

    #include

    int main( )

    {

    char str[100];

    printf( "Enter a value :");

    gets( str );

    printf( "\nYou entered: ");

    puts( str );

    return 0;

    }

    当编译和运行上面的代码,它会等待输入一些文本,当我们输入一个文本并按下回车键时,程序会继续并读取一整行直到该行结束。

    $ gcc main.c && a.out

    warning: this program uses gets(), which is unsafe.

    Enter a value :www.twle.cn

    You entered: www.twle.cn

    scanf() 和 printf() 函数

    format 是一个简单的常量字符串,我们可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。

    还有许多其他可用的格式选项,可以根据需要使用。

    现在我们通过一个范例来加深理解

    #include

    int main( ) {

    char str[100];

    int i;

    printf( "Enter a value :");

    scanf("%s %d", str, &i);

    printf( "\nYou entered: %s %d ", str, i);

    printf("\n");

    return 0;

    }

    但我们编译和运行上面的代码,它会等待我们输入一些文本,我们可以输入一个文本并按下回车键看看效果

    $ gcc main.c && a.out

    Enter a value like "yufei 28" :www.twle.cn 1

    You entered: www.twle.cn 1

    注意:

    scanf() 期待输入的格式与我们给出的 %s 和 %d 相同,这意味着必须提供有效的输入,比如 "string integer",如果您提供的是 "string string" 或 "integer integer",它会被认为是错误的输入。

    在读取字符串时,只要遇到一个空格,scanf() 就会停止读取,所以 "this is test" 对 scanf() 来说是三个字符串

    展开全文
  • C语言的I/O函数介绍C语言的输入输出函数定义在stdio.h里。本文主要介绍scanf / printf / gets / puts / fopen / fgets / fputs 这几个函数的用法。一. 标准输入/输出1.scanf() 与 printf()函数原型及说明:int scanf...

    C语言的I/O函数介绍

    C语言的输入输出函数定义在stdio.h里。本文主要介绍scanf / printf / gets / puts / fopen / fgets / fputs 这几个函数的用法。

    一. 标准输入/输出

    1.scanf() 与 printf()

    函数原型及说明:

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

    //scanf() 函数从标准输入设备stdin读取数据,返回与格式化字符串format成功匹配的个数。

    int printf(const char *format, ...);//scanf()函数将指定的字符串输出到标准输出设备stdout,如果成功,则返回输出的字符数(不包括字符串结束标识'\0'),否则,返回一个负数。

    用法举例:

    程序片:

    char* input = malloc(32*sizeof(char));

    scanf("%s",input);

    printf("%s",input);

    free(input);

    输入与输出:

    [liuyz@localhost Desktop]$ gcc -std=c99 -o StdInOutDemo.o StdInOutDemo.c

    [liuyz@localhost Desktop]$ ./StdInOutDemo.o

    who are you ?

    who[liuyz@localhost Desktop]$

    注:printf()函数不会自动输出到新的一行,需要手动使用"\n"指定在何处输出新的一行,例如:printf("123\n456");

    2.gets()与puts()

    函数原型及说明:

    char *gets(char *s);

    //gets()函数从标准输入设备stdin读取一行,然后将读取的数据存储到s指向的内存块中。

    //它将在这行数据的最后添加'\n'。如果成功则返回s,失败则返回NULL。

    //它不检查s是否足够大以存储读取的数据,所以它不安全。

    int puts(const char *s);

    //puts()函数将s和一个换行符下到标准输出设备stdout。如果成功,则返回一个非负数;否则,返EOF

    用法举例:

    程序片:

    gets(input);

    puts(input);

    输入与输出:

    [liuyz@localhost Desktop]$ ./StdInOutDemo.o

    who are u ?

    who are u ?

    [liuyz@localhost Desktop]$注:使用gets()函数的程序在编译是会给出一个警告,因为它是不安全的,所以不建议使用该函数。

    二. 文件操作

    1.fopen()

    函数原型及说明:

    FILE *fopen(const char *path, const char *mode);

    //以mode模式打开path指定的文件。如果成功,返回一个FILE指针;否则,返回NULL。

    //mode:

    //r:只读模式,从文件开始处读

    //r+:读写模式,从文件开始处读写,覆盖源文件的内容

    //w:只写模式,从文件开始处写,清空源文件;文件不存在则新建之

    //w+:读写模式,从文件开始处读写,清空源文件;文件不存在则新建之

    //a:写模式,在文件末尾写入数据;文件不存在则创建之

    //a+:读写模式,从文件开始处读,在文件末尾写入数据;文件不存在则创建之

    用法举例:

    FILE* fp=fopen("test.txt","r");

    2.fgets()和fputs()

    函数原型及说明:

    char *fgets(char *s, int size, FILE *stream);

    //fgets()函数从stream中读取至多size-1个字符并把它存储到s指向的内存块中,读到EOF或者读完一行停止,并在最后添加'\0'。

    //如果stram为stdin,则该函数等价于gets()。

    //如果成功,返回s;否则,返回NULL。

    int fputs(const char *s, FILE *stream);

    //fputs()把s写到stream,不包括s的结束标识'\0'。如果成功,则返回一个非负数;否则,返回EOF。

    //如果stream为stdout,则该函数等价于puts()。

    用法举例:

    //读取一个文件并输出到标准输出设备stdout

    FILE* fp=fopen(fileName,mode);

    if(fp)

    {

    char* p=malloc(bufSize*sizeof(char));

    while(p=fgets(p,bufSize,fp))

    {

    fputs(p,stdout);

    }

    }

    fclose(fp);

    3.fclose()

    函数原型及说明:

    int fclose(FILE *fp);

    //fclose()函数将output写入并关闭文件。如果成功,则返回0;否则,返回EOF。注:文件使用完毕要记得关闭,以免引起其他问题。

    展开全文
  • 标准输入文件,一般指键盘;scanf()、getchar() 等函数默认从stdin获取输入。 标准输出文件,一般指显示器;printf()、putchar() 等函数默认向stdout输出数据 下面演示用scanf()输入到stdin再由printf()输出到...

    Stdin和Stdout

    stdin stdout
    标准输入文件,一般指键盘;scanf()、getchar() 等函数默认从stdin获取输入。 标准输出文件,一般指显示器;printf()、putchar() 等函数默认向stdout输出数据

    下面演示用scanf()输入到stdin再由printf()输出到stdout的情况。

    #include <stdio.h>
    int main()
    {
    	int a;
    	char ch;
    	do
    	{
    		printf("请输入数据:");
    		scanf("%d",&a);        //键盘输入一个数据。
    		printf("%d",a);        //打印输入的数据。
    		printf("(y/n)");       //控制循环是否继续?
    		scanf("%c",&ch);       //y继续,n退出。	
    	}while(ch == 'y' || ch == 'Y');
    }
    

    这个程序看似没有问题,但实际上 scanf("%c",&ch); 在读键盘输入的数据时出现了问题。
    这里详细讲解一下:
    在这里插入图片描述
    程序运行后首先需要我们输入一个数据
    在这里插入图片描述
    我们输入100 然后终止符(空格或回车均可)我们发现并没有继续执行下去,我们再回车一下
    在这里插入图片描述
    我们发现并没有要求我们输入(y/n)来控制,而是程序自己终止了循环。

    实际上这里的scanf("%c",&ch)已经读取到键盘输入的回车,也就是’\n’字符,我们的输入习惯是,先输入100然后终止符再输入(y/n),但是C语言库中的scanf()是从输入文件缓冲区(也就是stdin)中获取数据,我们再输入第一个数据回车的时候,缓冲区就已经缓存了’\n’字符,而正好第二个scanf()要读取的就是字符型的数据。

    那么怎么避免这个情况呢。

    我们在输入完数据时进行清空输入缓冲区操作fflush(stdin),就不会影scanf("%c",&ch)的读取了。(如下👇)

    在这里插入图片描述
    这里是vs2012里用fflush(stdin)清空了缓冲流,但是vs2019里用的是rewind(stdin)(如下👇)
    在这里插入图片描述
    而rewind(stdin)实质上并不是清空了stdin而是指向了缓冲流的头部,使其再次输入。
    关于rewind()函数的作用和用法,后期再作补充。

    展开全文
  • C语言 文件的输入输出

    千次阅读 2019-07-31 15:37:51
    C语言程序在进行文件操作时遵循如下操作步骤: 打开->读写操作->关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区过程,不打开文件就不能对...stdin:标准输入文件指针,系统分配为键盘。 stdou...
  • C语言中,在程序开始运行时,系统自动打开3个标准文件标准输入、标准输出、标准出错输出,对应的文件指针分别为stdin、stdout、 stderr,这3个文件都与终端(命令行)相联系,所以在使用stdin、stdout、stderr时不...
  • # C语言标准输入输出 C语言输入输出,是指C程序从键盘、文件等外部获取数据,将数据输出到显示器、文件等外部输出设备中。 C语言通过标准库<stdio.h>输入输出函数提供各种输入输出功能,输入输出可以简单...
  • C语言文件的输入/输出

    千次阅读 2016-08-27 13:05:24
    C语言提供了强大的文件输入/输出功能,其标准I/O包中包含了很多专用函数,可以很方便地读取和写入文件,我将在下面介绍几种常用的文件I/O函数,并最后给出一个模拟压缩文件的例子。  在介绍函数之前,首先要说明...
  • 文件型结构体 ...要想对文件进行操作,系统需要很多控制信息,包括文件名,文件当前读写位置,缓冲区位置和大小等,为此,C语言提供了“文件型”结构来标示记录待操作文件的信息,该结构定义于...
  • C语言标准输入流、标准输出流、标准错误输出流 ...在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、 标准输出、标准出错 输出。通常这3个文件都与终端相联系。因此,以前我们所用到从终端输
  • 文件的输入输出函数 键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理方法来完成。而在编程时使用最多要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍C语言、C++提供的文件...
  • C语言文件的输入输出函数

    千次阅读 2012-10-21 10:34:13
    C语言文件的输入输出函数  C语言提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义函数; 另一类叫非标准文件函数, 也称非缓冲型文件函数。这类函数最早公用于UNIX操作系统, ...
  • 标准输入/输出重定向包括重定向到内存,或是重定向到文件。下面分别示例说明。 1、输入输出重定向到内存 setbuf函数具有打开和关闭缓冲机制。为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h...
  • c语言中对文件的操作函数分为两类: ...即,我们经常用到fopen,fgets,fputs,fscanf,fprintf,fseek,fclose,这些以f开头函数,都是在标准输入输出函数库中。 一类是非标准文件的读写,这些函数用于 ...
  • C语言中,在程序开始运行时,系统自动打开3个标准文件标准输入、标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到从终端输入或输出都不需要打开终端文件。系统自定义了3个文件指针...
  • C语言文件的输入输出

    千次阅读 多人点赞 2018-09-03 18:31:51
    C数据文件由一连串字符(或字节)组成,而不考虑行界限,两行数据间不会自动加分隔符,对文件的存取是以...1.1 C语言标准输入输出函数fopen来实现打开文件,fopen函数调用方式为: fopen(文件名,使用文...
  • C语言标准输入输出

    千次阅读 2012-09-28 14:51:15
     本文介绍C语言的标准输入输出方法,涉及到字符的输入输出及对文件的输入输出。 第一部分、字符的输入输出 C语言提供两个控制台格式化输入、输出函数printf()和scanf(),这两个函数可以在标准输入输出设备上以...
  • C语言 文件的输入与输出

    千次阅读 2018-04-08 18:31:26
    1.C提供了两种访问文件的途径: 二进制模式和文本模式二进制中: 程序可以访问文件的每个字节, 文本模式中,...如何用标准I/O读取文件和统计文件字符数:#include &lt;stdio.h&gt; #include &lt;s...
  • C语言中,在程序开始运行时,系统自动打开3个标准文件标准输入、 标准输出、标准出错输出。通常这3个文件都与终端相联系。因此,以前我们所用到从终端输入或输出都不需要打开终端文件。系统自定义了3个文件...
  • fromhttp://andylin02.iteye.com/blog/10840422011.06C语言标准输入流、标准输出流、标准错误输出流在Linux中,所有对设备和文件的操作都使用文件描述符来进行。Linux中一个进程启动时,都会打开3个文件标准输入...
  • C语言文件输入输出

    2020-05-10 19:01:40
    文件输入、输出 函数:fopen()、getc()、putc()、exit()、fclose() ...如何使用C标准I/O系列函数处理文件 文件模式和二进制模式、文本和二进制格式、缓冲和无缓冲I/O 使用既可以顺序访问文件也可以随
  • 系统的标准输入文件是指( )。A.键盘B.显示器C.软盘D.硬盘【答案】A【说明】键盘系统的标准输入文件,显示器是系统的标准输出文件。2.文件类型是一个( )。A.数组B.指针C.结构体D.地址【答案】C【说明】文件...
  • 系统调用I/O函数open,write,read,都是生成文件描述符,然后对文件描述符操作,比如:STDIN_FILENO,STDOUT_FILENO标准I/O函数,则是由fopen,fgets,...然后对文件指针操作,stdin,stdoutC语言的文件输入输出函数也是成...
  • C语言的输入&输出

    2021-04-01 00:10:16
    C语言中提供了许多内置输入输出函数。标准文件的定义 在C语言中会把所有设备当文件来处理。为了访问键盘和屏幕,以下三个文件会在程序执行时而打开。标准文件文件指针设备标准输入...
  • 2.标准输入/输出函数 FILE *fp 打开数据文件:fopen(文件名,使用文件方式) r:只读 (打开文本文件) w:只写 (文件不存在则新建一个文件) a:追加 (向文本文件尾添加数据) rb:只读 ...
  • C语言标准输入输出重定向

    千次阅读 2018-07-13 18:26:01
    标准输入重定向:freopen("a.txt","r"...#endif在加了这句,本地调试时候从文件读取输入数据,在线测试时候还是从标准输入读取输入数据 标准输出重定向:freopen("b....
  • 1.从标准输入逐个字符复制到标准输出,一个简单白给题目,提到标准输入输出,直接就想到scanf和printf这两个函数,对于取字符还有getchar和putchar两个函数,预期效果是什么?从键盘架输入一个字符,从显示器输出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,681
精华内容 672
关键字:

c语言的标准输入文件

c语言 订阅