c语言在输入字符串时输入空格的方式

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"),因为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之后的字符仍在缓冲区中。 总结:输入放入缓冲区,函数再从缓冲区读取,每个函数都有不同的处理方式,于是乎就让人纠结起来,我也没讲全,但针对空格是基本够用了。其他高级语言的话处理起来好多了,用c还是有一点点纠结,不过这也是自由吧。 也许有疏漏或不对的地方,见谅。

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值