含空格的字符串的输入

【转】
1.最简单的是将一个字符串分为一个一个字符输入

 char s[100];

 int i=0;

 while(scanf("%c",&s[i]),s[i]!='\n')i++;

 s[i]='\0';  //遇到换行停止输入,并且将换行替换为\0

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

但是如果在这段程序前还有其他类型的输入,则需要把回车吃掉,即加一条scanf(“%*c”),或者使用 getchar(),因为scanf不会将\n或者空格符赋值给字符串,但会赋值给字符输入”%c”.

如:

 int x;

 scanf("%d",&x);

 printf("%d\n",x);

 scanf("%*c");  //用来吃掉输入x时的分隔符号,可以是\n,或者空格之类的;

 while(scanf("%c",&s[i]),s[i]!='\n')i++;

 s[i]='\0';

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

ps:

getch()是从键盘接收

getchar()是从缓冲区读取,也都可以实现这个类似功能。

关于键盘上的回车键,可能大家都知道,按下回车键,在Window下产生两个字符,是\r\n(回车+换行),程序输入文本时遇到”\r\n”转换为\n,输出是将\n转为\r\n(二进制方式下不存在这种方式),这是Window系统的特立独行吧。这与mac和Unix都不相同,不详细说了。

2.char *gets( char *buffer )

比较简单,gets读取一行,遇到\n结束,它会把\n一并读取,并将\n替换为\0。(\n不会留在缓冲区)

char s[100];

gets(s);

如果输入abc def回车,则s中的值为abc def\0

关于程序前面的输入遗留的分隔符和第一种方法一样;

3.fgets(char * s,int size,FILE * stream)

和gets差不多,fgets会读取行尾的\n,然后再添加\0,(\n不会留在缓冲区)

char s[100];

 fgets(s,40,stdin);

如果输入abc def回车,则s中的值为abc def\n\0

4.scanf(“%[^\n]”,s)

使用scanf正则表达式,直到遇到\n停止输入,\n不会进入s,会留在缓冲区,需要吃掉,可以scanf(“%[^\n]%*c”,s)或者getchar()吃掉,这里\n可以换成其他字符。

当然用c++的话有getline,get等

cin.getline会将缓冲区的\n抛弃,cin.get不会(结束符会留在缓冲区)。

其实那都是在默认结束符号为\n时,当结束符设置为’a’,则抛弃a,如果a之后的字符仍在缓冲区中。

总结:输入放入缓冲区,函数再从缓冲区读取,每个函数都有不同的处理方式,于是乎就让人纠结起来,我也没讲全,但针对空格是基本够用了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值