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