scanf读取含空格的字符串

前言:转载链接https://blog.csdn.net/chuhe163/article/details/81048751


scanf()函数接收输入数据时,遇以下情况结束一个数据的输入: 

① 遇空格、“回车”、“跳格”键。 
② 遇宽度结束。 
③ 遇非法输入。 

scanf接收包含空格的字符串

#include <stdio.h> 
int main() 
{ 
    char str[80]; 

    scanf("%s",str); 
    printf("%s",str);
    return 0; 
}

输入:I love you! 
输出:I 
原因:scanf遇空格结束读取。 


解决:

#include <stdio.h> 
int main() 
{ 
    char str[80]; 

    scanf("%[^\n]",str); //读到'\n'结束读取
    printf("%s",str);
    return 0; 
}

输入:I love you! 
输出:I love you! 


//读到'\n'结束读取,存入str,再抛弃一个字符
scanf("%[^\n]%*c",str);
//读到'\n'结束读取,并将其读到的数据抛弃,然后再抛弃一个字符(这个字符是'\n')
//此时缓存中不存在任何字符
scanf("%*[^\n]%*c");
int c;
while((c=getchar())!='\n'&&c!=EOF); 
//读取一个字符,直到是\n或者是EOF停止
//等价于
scanf("*[^\n]");
#include <stdio.h>
   int main()
   {
       char  c;    
       //直到遇到字符a停止读取,
       //舍弃a
       //读取将a后的一个字符存入变量c
       scanf("%*[^a]%*c%c",&c);
       printf("%c\n",c);
       return 0;
   } 

输入:bcdea
输出:f

 

  • 24
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值