C语⾔字符和字符串的输⼊与输出
C语⾔
⼀、输⼊单个字符
1、scanf函数输⼊单个字符
C语⾔scanf输⼊时缓冲区问题
scanf函数是标准输⼊流(从键盘接收数据),接收的数据放⼊输⼊缓冲区中,其中就包括在键盘输⼊的空格、回车这类字符,当你⽤%d接收时是不会影响的,但是⽤%c就会产⽣错误,这是因为在"%c"输⼊时,空格和转义字符均作为有效字符会被%c接收。
例如:
#include<stdio.h>
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%c,%c,%c",a,b,c);
return0;
}
解决⽅法:
1.在接收第⼆个数之前清空缓冲区getchar(),getchar()是清空—个字符,如果缓冲区还有多余的字符则会被正常使⽤,
2.在%c之前加⼊空格,空格可以吸收回车符、空格。如果是在循环中多个scanf输⼊多个字符,建议使⽤",“进⾏隔开,并且在键盘输⼊的时候也要使⽤”,"
2、getchar函数输⼊单个字符
#include<stdio.h>
int main()
{
char  ch;
printf("Please input two character: ");
ch=getchar();/*输⼊1个字符并赋给ch */
putchar(ch);
putchar('\n');
putchar(getchar());/*输⼊1个字符并输出*/
putchar('\n');
}
Please input two characters: ok↙
o
k
⼆、输⼊字符串
1、scanf函数输⼊字符串
c语言char的用法
#include<stdio.h>
int main()
{
char str[20];//str是string的缩写, 即字符串
printf("请输⼊字符串:");
scanf("%s", str);/*输⼊参数是已经定义好的“字符数组名”, 不⽤加&,
因为在C语⾔中数组名就代表该数组的起始地址*/
printf("输出的结果是:%s\n", str);
return0;
}
例1.
请输⼊字符串:天天开⼼
输出的结果是:天天开⼼
例2.
请输⼊字符串:i am working
输出的结果是:i
出现例2的原因:
原因是⽤ scanf 输⼊带空格的字符串时系统将空格作为输⼊字符串之间的分隔符。也就是说,只要⼀“敲”空格,系统就认为当前的字符串已经结束,接下来输⼊的是下⼀个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。
那么这种情况该怎么办?
解决⽅法:
以空格为分隔符,数有多少个字符串,有多少个字符串就定义多少个字符数组。⽐如“i am working”有两个空格,表⽰有三个字符串,那么就定义三个字符数组:
# include<stdio.h>
int main()
{
char str1[20], str2[20], str3[20];
printf("请输⼊字符串:");
scanf("%s%s%s", str1, str2, str3);
printf("输出的结果是:%s %s %s\n", str1, str2, str3);//%s间要加空格
return0;
}
请输⼊字符串:i am working
输出的结果是:i am working
2、gets函数输⼊字符串
在<string.h>头⽂件中
字符串输⼊函数gets
格式:gets(字符数组)
功能:从键盘键⼊以回车结束的字符串放⼊字符数组中,并⾃动加’\0’
说明:输⼊串长度应⼩于字符数组维数,字符串中可以包含空格
字符串输出函数puts
格式:puts(字符数组)
功能:向显⽰器输出字符串(输出完,⾃动换⾏,即⽤’\n’替’\0’)
说明:字符数组必须以’\0’结束
#include<stdio.h>
#include<string.h>
int main()
{
char str[20];
printf("请输⼊字符串:");
gets(str);
printf("请输出字符串:");
puts(str);
return0;
}
请输⼊字符串:so cute
请输出字符串:so cute