常用易混的输入输出函数用法

来源:互联网 发布:服务网络占用硬盘 编辑:程序博客网 时间:2024/06/17 07:39
  1. printf函数、putchar函数、puts函数

    printf是输出一个字符串,putchar输出一个char。

打印格式

对应数据类型

含义

%d 

int

接受整数值并将它表示为有符号的十进制整数

%hd 

short int

短整数

%hu 

unsigned short

无符号短整数

%o 

unsigned int 

无符号8进制整数

%u 

unsigned int 

无符号10进制整数

%x,%X 

unsigned int 

无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF

%f 

float 

单精度浮点数

%lf 

double 

双精度浮点数

%e,%E 

double 

科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写

%c 

char 

字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

%s 

char *

字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0'结尾,这个'\0'即空字符)

%p 

void * 

以16进制形式输出指针

%% 

% 

输出一个百分号

 

printf附加格式:

字符

含义

l(字母l)

附加在d,u,x,o前面,表示长整数

- 

左对齐

m(代表一个整数)

数据最小宽度

0(数字0)

将输出的前面补上0直到占满指定列宽为止不可以搭配使用-

m.n(代表一个整数)

m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

 

    #include<stdio.h>

intputs(constchar *s);

功能:标准设备输出s字符串,在输出完成后自动输出一个'\n'

参数

    s:字符串首地址

返回值

    成功:非负数

    失败:-1

 

 

 

 

二.scanf函数、getchar函数、gets函数

    Getchar 是从标准输入设备读取一个char

    Scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据        

    #include <stdio.h>

    char *gets(char *s); 从标准输入设备读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件的结尾为止。

    S表示字符串的首地址;

    区别:1.getchar每次只能输入一个字符

        2.scanf 能输入连续的字符串,但遇到空格就会停止,且scanf输入的变量前一定要加&符号切记

        3.gets(str)允许输入含有空格的字符串

     

三.sprintf()函数、sscanf()函数

    #include<stdio.h>

intsprintf(char *_CRT_SECURE_NO_WARNINGS, constchar *format, ...);

功能:根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 '\0' 为止。

参数

    str:字符串首地址

    format:字符串格式,用法和printf()一样

返回值

    成功:实际格式化的字符个数

    失败: - 1

 

 

    chardst[100] = { 0 };

    inta = 10;

    charsrc[] = "hello world";

    printf("a = %d, src = %s", a, src);

    printf("\n");

 

    intlen = sprintf(dst, "a = %d, src = %s", a, src);

    printf("dst = \" %s\"\n", dst);

    printf("len = %d\n", len);

 

#include<stdio.h>

intsscanf(constchar *str, constchar *format, ...);

功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。

参数

    str:指定的字符串首地址

    format:字符串格式,用法和scanf()一样

返回值

    成功:参数数目,成功转换的值的个数

    失败: - 1

 

 

 

charsrc[] = "a=10, b=20";

    inta;

    intb;

    sscanf(src, "a=%d, b=%d", &a, &b);

    printf("a:%d, b:%d\n", a, b);

 

 

 

 

 

 

fgets()

#include<stdio.h>

char *fgets(char *s, intsize, FILE *stream);

功能:从stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 '\0' 作为字符串结束。

参数

    s:字符串

    size:指定最大读取字符串的长度(size - 1)

    stream:文件指针,如果读键盘输入的字符串,固定写为stdin

返回值

    成功:成功读取的字符串

    读到文件尾或出错: NULL

 

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。通过scanf和gets输入一个字符串的时候,不包含结尾的"\n",但通过fgets结尾多了"\n"。fgets()函数是安全的,不存在缓冲区溢出的问题。

 

    charstr[100];

    printf("请输入str: ");

    fgets(str, sizeof(str), stdin);

    printf("str = \"%s\"\n", str);

 

 

fputs()

#include<stdio.h>

int fputs(constchar * str, FILE * stream);

功能:将str所指定的字符串写入到stream指定的文件中, 字符串结束符 '\0' 不写入文件。

参数:

    str:字符串

    stream:文件指针,如果把字符串输出到屏幕,固定写为stdout

返回值:

    成功:0

    失败:-1

 

fputs()是puts()的文件操作版本,但fputs()不会自动输出一个'\n'

 

    printf("hello world");

    puts("hello world");

    fputs("hello world", stdout);

 

 

10.3.1 按照字符读写文件fgetc、fputc

1)写文件

#include<stdio.h>

int fputc(int ch, FILE * stream);

功能:将ch转换为unsigned char后写入stream指定的文件中

参数:

    ch:需要写入文件的字符

    stream:文件指针

返回值:

    成功:成功写入文件的字符

    失败:返回-1

 

char buf[] = "this is a test for fputc";

int i = 0;

int n = strlen(buf);

for (i = 0; i < n; i++)

{

    //往文件fp写入字符buf[i]

    int ch = fputc(buf[i], fp);

    printf("ch = %c\n", ch);

}

2)文件结尾

在C语言中,EOF表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。

 

#defineEOF (-1)

 

当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ANSI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件

#include<stdio.h>

int feof(FILE * stream);

功能:检测是否读取到了文件结尾。判断的是最后一次"读操作的内容",不是当前位置内容(上一个内容)

参数:

    stream:文件指针

返回值:

    非0值:已经到文件结尾

    0:没有到文件结尾

 

3)读文件

#include<stdio.h>

int fgetc(FILE * stream);

功能:从stream指定的文件中读取一个字符

参数:

    stream:文件指针

返回值:

    成功:返回读取到的字符

    失败:-1

 

char ch;

#if 0

while ((ch = fgetc(fp)) != EOF)

{

    printf("%c", ch);

}

printf("\n");

#endif

 

while (!feof(fp)) //文件没有结束,则执行循环

{

    ch = fgetc(fp);

    printf("%c", ch);

}

printf("\n");

 

 

按照行读写文件fgets、fputs

1)写文件

#include<stdio.h>

int fputs(constchar * str, FILE * stream);

功能:将str所指定的字符串写入到stream指定的文件中,字符串结束符 '\0' 不写入文件。

参数:

    str:字符串

    stream:文件指针

返回值:

    成功:0

    失败:-1

 

char *buf[] = { "123456\n", "bbbbbbbbbb\n", "ccccccccccc\n" };

int i = 0;

int n = 3;

for (i = 0; i < n; i++)

{

    int len = fputs(buf[i], fp);

    printf("len = %d\n", len);

}

2)读文件

#include<stdio.h>

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

功能:从stream指定的文件内读入字符,保存到str所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 '\0' 作为字符串结束。

参数:

    str:字符串

    size:指定最大读取字符串的长度(size - 1)

    stream:文件指针

返回值:

    成功:成功读取的字符串

    读到文件尾或出错: NULL

 

char buf[100] = 0;

 

while (!feof(fp)) //文件没有结束

{

    memset(buf, 0, sizeof(buf));

    char *p = fgets(buf, sizeof(buf), fp);

    if (p != NULL)

    {

        printf("buf = %s", buf);

    }

}

 

 

按照格式化文件fprintf、fscanf

1)写文件

#include<stdio.h>

int fprintf(FILE * stream, constchar * format, ...);

功能:根据参数format字符串来转换并格式化数据,然后将结果输出到stream指定的文件中,指定出现字符串结束符 '\0' 为止。

参数:

    stream:已经打开的文件

    format:字符串格式,用法和printf()一样

返回值:

    成功:实际写入文件的字符个数

    失败:-1

 

fprintf(fp, "%d %d %d\n", 1, 2, 3);

 

  1. 读文件

    #include<stdio.h>

    int fscanf(FILE * stream, constchar * format, ...);

    功能:从stream指定的文件读取字符串,并根据参数format字符串来转换并格式化数据。

    参数:

        stream:已经打开的文件

        format:字符串格式,用法和scanf()一样

    返回值:

        成功:参数数目,成功转换的值的个数

        失败: - 1

     

    int a = 0;

    int b = 0;

    int c = 0;

    fscanf(fp, "%d %d %d\n", &a, &b, &c);

    printf("a = %d, b = %d, c = %d\n", a, b, c);

     

原创粉丝点击