C语言 字符串的输入输出 学习笔记

**

C语言 字符串的输入输出 学习笔记

零,创建存储空间

**首先,c语言中字符串都是用字符数组的形式来存储,并且在使用操作过程中不以数组形式出现(常常是数组名作为首地址单枪匹马)
创建固态存储空间:

char zifu[MAX];       //创建完成 

创建动态存储空间:(不建议)

char *zifu;
scanf("%s", zifu);

弊端:zifu是内存空间中随机找的一个地方,进行字符串赋值操作会覆盖此处数据和代码,并可能导致程序异常终止。
但是如果不进行任何更改操作,那么这样创建一个动态数组完全可以。

一,输入

1.scanf():适合输入单词类型

针对输入串的空格:串前空格跳过,串中空白字符(换行符,空格符,制表符)为自动结束 [且不读取该空白字符](字符串的最后有“/0”)
关于读取格式:scanf("%s/%10s",zifu);ps:%10s为指定了字段宽度,表示读取10个字符。另外,没有赋值符号!
关于scanf()函数:scanf()的返回值是已经成功赋值的变量个数(0/1/2…)或者如果遇到错误或遇到end of file,返回值为EOF.

分隔符问题:主要是针对“%c”:默认没有任何分隔字符(包括all空白字符)***解决方法:***(1) 清空缓冲区——有一个名为fflush(stdin)的函数,可以用来清空缓冲区。
while(scanf("%c%c",&a,&b)!=EOF)  
    {  
        printf("a=%c,b=%c\n",a,b);  
        fflush(stdin);  
        printf("Input the value of a and b:");  
    }  

即:在空白字符被误读之前将缓冲区暂时清空。

(2)将缓冲区的致错数据读出来(间接清理缓冲区)——getchar() or gets()

对于getchar():读取缓冲区的第一个字符(EOF),该函数的返回值为该字符(EOF==-1)(若返回给整型变量则是它对应的ASCII码)扩展兄弟函数putchar():putchar(ch/int)——此函数输出在终端以参数ch/int(ASCII码)对应的char值

2.gets{get string}():读取一行东西

判断遇到的第一个换行符(\n)结束输入,并且用一个空字符(\0)替换该换行符。
gets()的缺陷:不会检查数组能否放得下输入行所以经常会出现warning报错
该函数的使用:gets(name):将读取的一行字符串赋值到name数组中。该函数return字符串的首地址。(str=gets(name)——str也指向name字符串数组)

char name[MAX];    
char *ptr; //指向char的指针     
printf("Please input your name.\n");    
ptr = gets(name); //使用一个地址吧字符串赋值给name   
                  //gets()函数使用return关键字返回字符串的地址    
printf("name, %s\n", name);    
printf("ptr, %s\n", ptr);

如何结束行字符串的反复读取:如果在gets()函数在读取字符串时出错或者遇到文件结尾(EOF),它就返回一个空(或0)地址,这个空地址被称为空指针,并且stdio.h里面定义的常量NULL来表示,可以用下面的代码来进行一些错误检测。

while(get(name) != NULL)

3.fgets():读取字符串通过两种方式结束:换行符OR字符数量达上限

比前两个 多一个性能,不仅是读取标准输入方式(键盘)
会读取入最后的换行符

fgets(name, MAX, stdin);

PS:fgets()也会像gets()一样在读取的字符串末尾加上一个空字符
第三个参数来说明读哪一个文件!从键盘上读取数据时,可以使用stdin(代表standard input)作为参数,这个标识符在stdio.h中定义。

二,输出

1.printf():输出字符串

printf("%s",name);

2.puts{put string}():只需要字符串参数的首地址(即数组名)

遇到字符串末尾的/0结束输出,并且自动加上一个换行符。

3.fputs():面对文件版本

fputs(line,stdout);

与puts()函数不同,fputs()函数并不为输出自动添加换行符
ps:puts()&fputs()分别与gets()&fgets()相对应{换行符的自动添加是相反的}

发布了10 篇原创文章 · 获赞 0 · 访问量 113

猜你喜欢

转载自blog.csdn.net/weixin_45076393/article/details/104462333