设为首页 加入收藏

TOP

c语言中读入带空格的字符串
2015-01-22 21:13:43 来源: 作者: 【 】 浏览:40
Tags:言中 空格 字符串

http://blog.csdn.net/pipisorry/article/details/37073023

问题:

scanf(%s, a);

运行输入hello world
回车
则输入到a的只是空格之前的部分,怎样把空格之后的部分也输出?


1. scanf ( %[^ ] , str );
#include 
  
   
int main(){
    char str[50];
    scanf( %[^
], str );
    printf( %s
, str );
    return 0;
}
  
more: scanf中的正则表达式
1、定制自己的扫描集 %[abc]、%[a-z]、%[^abc]、%[^a-z],比isdigit()、isalpha()更加灵活。[]内是匹配的字符,^表示求反集。
int i;
char str[80], str2[80];
// scanf(%d%[abc]%s, &i, str, str2);
// printf(%d %s %s ,i,str,str2);
// scanf(%[a-zA-Z0-9], str);
// scanf(%[^abce], str);
scanf(%[^a-z], str);
printf(%s ,str);
2、读入一个地址并显示内存地址的内容
int main(void){
char ch='c';
printf(%p , &ch); // print the address of ch.
char *p;
cout< scanf(%p, &p); //input the address displayed above
printf(Value at location %p is %c ,p,*p);
return 0;
}
3、丢弃不想要的空白符:scanf(%c %c);
4、控制字符串中的非空白符:导致scanf()读入并丢弃输入流中的一个匹配字符。%d,%d;
5、压缩输入:在格式码前加上*,则用户就可以告诉scanf()读这个域,但不把它赋予任何变量。
scanf(%c%*c, &ch); 使用此方法可以在字符处理时吃掉多余的回车。

2.scanf()
int t[999];
int sum=0;
while(scanf(%c,&t[sum++])!=EOF);

3.gets() gets()
#include 
   
      
//char *fgets( char *str, int num, FILE *stream ); 
int main(){
    char buffer[10]; 
    //fgets(buffer,10,stdin); //带有回车符
    gets(buffer);    //没有回车符
 
    printf(%s,buffer); 
    return 0;
}
   
more: gets() 不检查字符串容量,有可能越界写数据,用户可不一定给你按套路出牌,可能输入长达300字节甚至2k字节的字符串,这样的话很危险
虽然strlen,strcyp等等这些函数因为追求高效率也不会检查指针是否为空,指针是否可写,但是这些函数是C程序员来操作的,C程序员有正确使用函数的素质。 但是gets() 是用户来输入,用户并不知道字符串上限,而且就算知道,也不一定有素质去按规定使用,要多多注意
用fgets(str,80,stdin);就不危险了,fgets比较安全?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva:10602 - Editor Nottoobad(.. 下一篇HDU 4587 TWO NODES (双连通割点..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: