c++语言程序设计_c++语言程序设计

c++语言程序设计_c++语言程序设计C语言字符、字符串操作函数

bilibili课程:C C++就业班视频C#/C++全栈高级开发工程师 就业班(完结)_哔哩哔哩_bilibili

putchar( )  和getchar ( ), fputchar()和 fgetchar 
putc( ) 和 getc( ),  fputc( ) 和 fgetc( )
puts( ) 和gets () ,fputs ( )和 fgets ( ) 
printf( )  和 sprintf( ) ,fprintf ( )
scanf( )  和sscanf( ), fscanf( ) 

1.putchar () 和getchar( ) ,fputchar, fgetchar 

1.1. putchar( )

int putchar (int char)

作用:向屏幕输出一个字符。

返回值:一个无符号整数,代表这个char的ASCII码。

 putchar('A'); putchar('\n');

 还可以输入一个0-128之间的整数,因为char 可以看做一个字节长度的无符号整数。

putchar((char)120);//x putchar((char)50);//2

1.2 getchar( )

int getchar (void )

返回值:自定义的字符(的ASCII码)。

作用1:从缓冲区读取一个字符。如果缓冲区没东西,那么提取用户从键盘新输入的1个字符

 char ch; ch=getchar(); printf("%c",ch);

用户输入 F 然后敲回车,程序打印字母F (后面没有回车),然后程序结束。

c++语言程序设计_c++语言程序设计

但是这时候,回车仍然存入缓冲区。再次getchar( )也可以拿到这个回车。

作用2:清除缓冲区的回车。

 char ch; ch=getchar(); printf("%c",ch); printf("%c",getchar());

敲一个字母G ,敲回车,打印两次,会把回车输出:

c++语言程序设计_c++语言程序设计

 利用getchar( )清除缓冲区回车的例子:

系统生成随机数,用户输入一个数字进行比对,如果猜错了用户自己选择是否继续。但是敲数字末尾一定回敲一个回车,这个回车代替了用户输入的Y 或者N。解决办法是把回车空格都取干净

srand(time(NULL));//<time.h >头文件 int r_num=rand()%101+1; //1-100 int a; while(1){ printf("请输入数字\n"); scanf("%d",&a); while(getchar()!='\n'){ continue; }//这个while必须有 if(a==r_num){ printf("猜对了"); } else{ printf("猜错了,是否继续, Y N\n"); char n; scanf("%c",&n); if(n=='N'){ printf("输入的字符是%c,表示您拒绝继续\n",n); break; } } }

1.3. fputchar( )

参考博客 C语言函数大全–f开头的函数(下)_c语言floorf_Huazie的博客-CSDN博客

int fputchar (char ch );   

 送一个字符到标准输出流(stdout)中,出错则返回EOF

30.2 演示示例
#include <stdio.h>

int main(void)
{

   char msg[] = “This is a test”;
   int i = 0;

   while (msg[i])
   {

      fputchar(msg[i]);
      i++;
   }
   return 0;
}
————————————————
版权声明:本文为CSDN博主「Huazie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u0/article/details/

1.4. fgetchar ( )

int fgetchar(void);

从用户键盘获取一个字符。 用户最后敲的回车仍然被留在缓冲区中。。

char ch2; ch2=fgetchar(); printf("%c",ch2);

2.putc( ) 和 getc( ),  fputc( ) 和 fgetc( )

2.1 . putc ()

等同于fputc( ) 但是既可以做函数也可以做宏。fputc( )只能作为函数实现。其他作用,语法,都相同。

2.2. getc( )

等同于fgetc( ) 但是既可以做函数也可以做宏。fputc( )只能作为函数实现。其他作用,语法,都相同。

还是有区别的,不带f  的,只能用于标准输入输出流(键盘,屏幕) 带f 的可以用于所有流

2.3. fputc ()

int fputc ( int  c,  FILE *  stream )

 向文件指针stream代表的文件中,写入一个字符,这个字符对应的整数是c  。

返回值:成功:该字符对应的ASCII码

        失败:-1

2.4. fgetc ()

int fgetc ( FILE* stream)

作用:从文件指针stream代表的文件中,读取一个字符。

返回值:成功:读到的字符对应的ASCII码

            失败:-1

文件到达结尾的判断条件:EOF 也就是返回-1

以EOF作为结束标志的文件,必须是文本文件

因为二进制里会出现-1 。fputc 往文件里放-1 (这个操作最好别弄)就把文件当二进制文件了

注意:二进制文件使用 feof (FILE * fp) 函数来判断。返回值不是0,到达。返回值0,表示没到文件结尾。

char ch; FILE *fp=fopen("csdn.txt","r"); while( (ch=fgetc(fp)) !=EOF ){ printf("%c ",ch); } //事先在本cpp同一个文件夹下 //创建了csdn.txt并且往里面写了一些大写字母

3.puts ( )和gets( ),fputs ( )和 fgets ( ) 

3.1 puts( )

int puts (const char* str)

作用:标准设备输出一个字符串str 。注意:输出完成后会自动在后面添加\n。

返回值:成功则返回非负整数(可以是0 )。失败返回-1.

 puts("hello");

3.2 gets( )

char*  gets( char*  s)

作用:从标准输入读入字符,并保存到s 指定的空间,直到出现换行符或者读到文件结尾。

返回值:成功:读入的字符串。(??我认为是首地址?  char s[ ] = “abc” 返回的是s)

           失败:NULL

gets( ) 和scanf ( ) 的两点区别:

1.gets( )允许用户输入的字符串中含有空格,也会保留下来。

scanf遇到空格就不管后面的了,自动停止。

2.  gets( )会把用户最后敲的回车,从缓冲区里扔掉。但是scanf( )会吧这个回车保留在缓冲区。

因此,如果你刚用了scanf( ) ,后面又要获取用户键盘输入,需要先

while (getchar ( ) != ‘\n’ ) 清除缓冲区内的回车。

int dig; printf("请输入的值\n"); scanf("%d",&dig); printf("您输入的数字是%d\n",dig); // getchar(); //重要 不能注释掉 char ch; printf("请输入一个字符\n"); scanf("%c",&ch); printf("您输入的字符是%c\n",ch);

中间那句getchar( )必须要有,不然还没等输入一个字母’A ‘ ,程序就执行完了,第二次打印的是一个换行符。

char str[10]; gets(str); printf("%s",str); //输入ABC DEF 会打印出ABC DEF后面没回车

 注意:和scanf( )一样,都是不安全的,因为长度超出了规定长度,也不报错,会造成字符数组越界(缓冲区溢出)。

3.3. fputs ( )

int fputs (const char* __restrcit_Str,  FILE *stream )

作用:向文件指针stream代表的文件中,写入字符串__restrcit_Str,字符串结束符号’\0’不写入文件中。(文件应当先执行打开操作)

参数2也可以是标准输出 (屏幕),此时类似于printf( ), 向屏幕打印字符串Str 。参数2写作 stdout 。

返回值:成功:0 。失败:-1.

fputs ( ) 不会在字符串末尾添加回车。 puts ( )向屏幕打印字符串会在后面自动加回车。

3.4. fgets ( )

char* fgets ( char* __restrict_Buf, int  Size, FILE *stream )

 返回值:成功:读到的Buf 。失败:NULL。

3.4.1 作用一:从文件指针steam代表的文件中,读入数据,保存到_Buf指定的内存空间,直到出现换行字符、读到文件结尾或者已经获取了 Size-1 个字符为止。然后自动在末尾添加’ \0′  (字符串终止符) 。

注意,字符串总长度是Size,最后一个是字符是’\ 0 ‘ 也计算进长度了。所以看起来长度是size -1

3.4.2   作用2:第三个参数也可以是stdin 标准输入(键盘),此时类似于scanf ( ), 从键盘获取用户敲入的字符串

char str3[30]; fgets(str3,6,stdin); printf("%s",str3); //敲ABCDEFG回车 str3打印输出是ABCDE //敲ABC回车(长度不够6) str3打印输出是ABC回车 

 记住!!当长度不够时,fgets( )会保留用户敲入的回车!

fgets ( )比 gets ( ) 更安全的获取用户输入

4.printf( ),  sprintf( ), fprintf ()

4.1 printf( )

int  printf ( const char* _restrict_format, …) 

作用:向屏幕输出按照一定格式编写的字符串。

形参列表里的…表示这是一个变参函数。最后一个固定参数(这里是format)通常是格式描述串,包含格式匹配符。函数参数的个数、类型、顺序由这个固定参数决定。

printf("hello world\n");//1个参数 int a =40; printf("%d",a);// 2个参数 printf("%d+%d=%d",10,20,30);//4个参数 

4.2 sprintf( )

int sprintf (const char* __restrict _Dest, const char* Format, …)

 作用: 向目标字符串Dest中写入按照一定格式编写的字符串,不再向屏幕输出。

…表示参数的个数和类型取决于format。

char str2[15]={0}; sprintf(str2,"%d年%d月%d日",2023,6,3); printf("%s",str2); //2023年6年3日

4.3 fprintf ( )

int  fprintf ( FILE* stream, const char* _Format, …)

 功能:按照一定的格式(Format规定的)转换并格式化数据,然后将结果写入文件指针stream代表的文件中,指定出现字符串结束符 ‘\0’为止。

返回值:成功:实际写入文件的字符个数。

            失败:-1

例子:向文本文件中,写入10个随机数字。

void write_ran(){ FILE *fp6=fopen("rand.txt","w"); if(!fp6){ perror("出错了 没文件"); } srand(time(0)); //fprintf别忘了回车!!! for(int i=0;i<10;i++){ int a=rand()%70+30; fprintf(fp6,"%d\n",a); } fclose(fp6); }

5. scanf( ) 和  sscanf( )

5.1 scanf ( )

inline int scanf( const char* __ristrct_Format, …)

作用:获取用户从键盘输入的数据,并与格式化字符串Format进行比对,将数据存入变量中。

scanf 不允许用户输入空格;碰到空格就提前结束。

int arr[4]; for(int i=0;i<4;i++){ printf("请输入数组元素的值\n"); scanf("%d",&arr[i]); } for(int i=0;i<4;i++){ printf("%d ",arr[i]); }

scanf ( )和gets ( )都是不安全的键盘输入获取方式,因为它们会一直读取到用户敲入回车(换行)或文件结束,容易越界。

5.2 sscanf ( )

int sscanf ( const char* __restrict__Src, const char* __restrict_Format, …)

把参数1  Src字符串当做源头,从中获取数据,并与格式化字符串Format进行比对,存入…代表的变量中。 

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

            失败: -1

char str3[50]="year:2023-month:6-day:3"; int y,m,d; sscanf(str3,"year:%d-month:%d-day:%d",&y,&m,&d); printf("%d-%d-%d",y,m,d);//2023-6-3

5.3 fscanf( ) 

int fscanf( FILE* stream , const char* format, …)

作用:从文件指针stream代表的文件中,按照format格式字符串规定的格式,读取数据,存入…包含的参数中。

返回值:  成功:正确匹配的个数。

               失败:-1。

注意事项:(1) 用于存储数据的空间,在使用之前应当清空。比如,要将文本中10个整数读出来,存进array[10]  数组中,array这个数组不能有数据。

(2)fscanf()函数在每一次调用时,都会自动判断下一次调用是否匹配参数2 format规定的格式。如果不匹配,提取结束文件,feof ( FILE* stream )为真。

例子:之前写入文件 “rand.txt” 的10个随机数,再以整数的形式fcanf 扫描提取到一个新数组中,保存起来。  注意利用fprintf 写文件的时候,用的什么格式,fscanf 读取的时候,格式字符串保持一致!别忘了换行符这种细节。  \n

void read_ran(){ FILE *fp77=fopen("rand.txt","r"); if(!fp77){ perror("出错了 没文件"); } int array[10]; int i=0; while(1){ fscanf(fp77,"%d\n",&array[i]); //注意!!如果fscanf第二个参数没有回车符号,最后一个数字将不匹配。 //然后最后一个数字打印两次。 printf("%d\n",array[i]); i++; if(feof(fp77)){ break; } } fclose(fp77); }

今天的文章
c++语言程序设计_c++语言程序设计分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/80154.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注