字符串的输入输出问题
C语言中,没有字符串型变量,只有字符串常量。可以用字符数组处理字符串。
字符数组定义:
char 数组名[常量表达式];//用于存储和处理一个字符串
char 数组名[常量表达式][常量表达式];//用于存储和处理多个字符串
一、scanf()和printf()
使用%s输入字符串,遇到第一个空白字符(包括回车,空格,制表符)时结束;
1)单个字符串
char a[10];
scanf(“%s”,a);
printf(“%s”,a);
注:因为输入项是数组名,代表了数组的首地址,所以不加&
2)多个字符串
charstr1[5],str2[5],str3[5];
scanf(“%s%s%s”,str1,str2,str3);
注:如果用一个scanf函数输入多个字符串,则在输入时以空格分隔。
二、gets()和puts()
包含头文件:stdio.h
char a[10];
gets(a);
puts(a);
注:
gets()遇到enter键结束,会丢掉输入最后的换行符
puts()专门打印字符串,给出地址即可,遇到’/0’结束,为输出自动带换行符
可用#define puts(x) fputs(x,stdout)消除puts输出自带的回车效果
三、单个字符的输入输出
char c;
c=getchar();
putchar();
或者
char c;
scanf(“%c”,&c);
printf(“%c”,c);
使用 %c输入字符时,空白字符(包括回车,空格,制表符)也作为有效字符输入;
四、输入缓存区残留的问题
scanf()和getchar()函数是从输入流缓冲区 中读取值的,而并非从键盘(也就是终端)缓冲区读取。而读取时遇到回车(\n)而结束的,这个\n会一起读入输入流缓冲区的,所以第一次接受输入时取走字 符后会留下字符\n,这样第二次的读入函数直接从缓冲区中把\n取走了,显然读取成功了,所以不会再从终端读取!因此后面只要加上fflush(stdin)函数释放缓冲区数据就可以了.
解决办法:可以在两个scanf()函数之 后加个fflush(stdin);,还有加getch();getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情 况都可行。
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);#include <stdio.h>
int main()
{
int a;
char c; do
{
scanf("%d",&a);
fflush(stdin);
scanf("%c",&c);
fflush(stdin);
printf("a=%d c=%c\n",a,c);
}while(c!='N');
}
总结:多次使用输入语句,要记得清除缓存;带空格的字符串的输入要使用gets()