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

猜你喜欢

转载自blog.csdn.net/melody_1016/article/details/81364483
今日推荐