字符串的输入输出问题

来源:互联网 发布:淘宝注册页面在哪 编辑:程序博客网 时间:2024/05/20 07:36

字符串的输入输出问题

 

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()

 

原创粉丝点击