如何在字符数组中存储空白字符

        C没有为字符串定义专门的数据类型,而是把它存储在字符数组中,虽然这种方法可以有效地解决字符串存储问题,但当使用scanf函数为字符数组赋值时,含有空白符(空格、制表符、换行符)的字符串却无法完整储存。如:

#include<stdio.h>

int main(void)

{

char str[256];

scanf("%s",str);

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

 

return 0;

}

         当用户输入不含空白符的字符串时,字符串能正常输出,比如Hello; 但当用户输入的是含有空白符的字符串时,只能输出空白符前的字符串,比如Hello world!,只能输出Hello.

那么应当如何存储含有空格符的字符串(在控制台中)呢?

下面提供两种解决方法:

1. 用gets函数实现:

功能: 从流中取一字符串
用法: char *gets(char *string);
程序例:

#include <stdio.h>

int main(void)

{

  char str[256];

  gets(str);

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

 

  return 0;

}

运行结果:

Hello world!

Hello world!

Press any key to continue

 

2.用getchar函数实现

功 能: 从stdin流中读字符
用法: int getchar(void);
程序例1:

#include<stdio.h>

int main(void)

{

  char str[256];

  int i=0;

 

  str[0] = getchar();

  while (str[i++]!='\n')

  {

       str[i] = getchar();  

  }

  str[i-1]='\0';

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

 

  return 0;

}

运行结果:

Hello world!

Hello world!

Press any key tocontinue

程序例2:

如果想存储换行符,则可用如下方法:

#include<stdio.h>

int main(void)

{

      char ch,str[256];

      int i=0;

     

  while((ch = getchar())!=EOF)//EOF是文件结尾标记,MS-DOS下可用ctrl+z来标志文件结尾

      {

           str[i++]=ch;

      }

      str[i]='\0';

 

      printf("%s",str);

 

      return 0;

}

运行结果:

Hello world!

How are you?

I'am OK

^Z

Hello world!

How are you?

I'am OK

Press any key tocontinue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值